python - django templates examples
Django error de atributo. ''módulo'' objeto no tiene atributo ''rindex'' (4)
Acabo de empezar a usar django, solo en el capítulo 3 del libro en línea.
Sigo recibiendo este error extraño cuando intento acceder al sitio.
El objeto AttributeError at / test / ''module'' no tiene atributo ''rindex''
mi url.py es solo
from django.conf.urls.defaults import *
from mysite import hello
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('''',
(''^test/$'',hello),
)
y mi función de saludo está en mi sitio. Camino de Python es
[''/home/james/django/mysite'', ''/usr/lib/python2.6'', ''/usr/lib/python2.6/plat-linux2'', ''/usr/lib/python2.6/lib-tk'', ''/usr/lib/python2.6/lib-old'', ''/usr/lib/python2.6/lib-dynload'', ''/usr/local/lib/python2.6/dist-packages'', ''/usr/lib/python2.6/dist-packages'', ''/usr/lib/python2.6/dist-packages/PIL'', ''/usr/lib/pymodules/python2.6'', ''/usr/lib/python2.6/dist-packages/gtk-2.0'', ''/usr/lib/pymodules/python2.6/gtk-2.0'', ''/home/james/django'']
Realmente no entiendo qué está pasando aquí. Supongo que estoy pasando por alto algo estúpido, porque parece muy sencillo. Cuando lo hago desde mysite, hola en el intérprete de python, no genera ningún error.
cualquier ayuda seria genial
editar: rastrear
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/test/
Django Version: 1.2.3
Python Version: 2.6.6
Installed Applications:
[''django.contrib.auth'',
''django.co
ntrib.contenttypes'',
''django.contrib.sessions'',
''django.contrib.sites'',
''django.contrib.messages'']
Installed Middleware:
(''django.middleware.common.CommonMiddleware'',
''django.contrib.sessions.middleware.SessionMiddleware'',
''django.middleware.csrf.CsrfViewMiddleware'',
''django.contrib.auth.middleware.AuthenticationMiddleware'',
''django.contrib.messages.middleware.MessageMiddleware'')
Traceback:
File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response
91. request.path_info)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in resolve
217. sub_match = pattern.resolve(new_path)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in resolve
123. return self.callback, args, kwargs
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in _get_callback
134. mod_name, func_name = get_mod_func(self._callback_str)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in get_mod_func
78. dot = callback.rindex(''.'')
Exception Type: AttributeError at /test/
Exception Value: ''module'' object has no attribute ''rindex''
hola la función es
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
El patrón de url debe ser tuplas de cadenas, no un módulo. Algo como:
urlpatterns = patterns('''',
(''^test/$'',''hello.views.hello''),
)
EDITAR: También puede pasar un llamable a los patrones. Simplemente nunca lo había visto hecho de esa manera (los documentos siempre pasan una cadena). Sin embargo, en realidad está pasando un módulo, no una cadena o un nombre que se puede llamar (por lo que django se confunde y primero lo trata como si fuera un objeto que se puede llamar, ya que no es una cadena pero luego vuelve a intentar tratarlo como una cadena , por lo tanto La llamada a rindex
). Tal vez quisiste pasar hello.views.hello
como así:
urlpatterns = patterns('''',
(''^test/$'',hello.views.hello),
)
Alternativamente, puede cambiar su línea de importación from mysite.hello.views import hello
, o simplemente usar la sintaxis de la cadena (creo que ''hello.views.hello''
lo haría como se sugirió inicialmente).
Probablemente necesitas cambiar
from mysite import hello
a algo como
from mysite.hello_file import hello_view
Y luego usar:
(''^test/$'',hello_view)
Porque necesita pasar una función (ver), no un archivo o módulo. Como creo que mgalgs estaba tratando de explicar, pero me parece un poco confuso para los principiantes.
Prueba esto
urlpatterns = patterns('''',
(''r^test/$'',''hello.views.hello''), )
Recibí este error al agregar una Vista basada en clase de la siguiente manera:
url(r''^tv/$'', views.MyTemplateView(), name=''my_tv''),
por supuesto .as_view()
debe agregarse para corregir el error, el object has no attribute ''rindex''
:
url(r''^tv/$'', views.MyTemplateView.as_view(), name=''my_tv''),