Django 1.5 - не удается найти определенный вид при использовании TemplateView
Я создаю index.html и использую TemplateView. Когда я пытаюсь получить доступ к своему индексу, я получаю сообщение об ошибке, что мое представление индекса не определено. Я не знаю почему, я просто следую этому шаблону https://docs.djangoproject.com/en/dev/topics/class-based-views/
Вот мои коды:
urls.py
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('',
url(
r'^$',
views.IndexView.as_view(),
name='index'
),
)
views.py
from django.views.generic import TemplateView
def IndexView(TemplateView):
template_name = 'index.html'
traceback (обновление)
Environment:
Request Method: GET
Request URL: http://localhost:8000/
Django Version: 1.5
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'accounts',
'front')
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 "/home/cath/virtualenvs/autovine_env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
103. resolver_match = resolver.resolve(request.path_info)
File "/home/cath/virtualenvs/autovine_env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
319. for pattern in self.url_patterns:
File "/home/cath/virtualenvs/autovine_env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns
347. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/cath/virtualenvs/autovine_env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module
342. self._urlconf_module = import_module(self.urlconf_name)
File "/home/cath/virtualenvs/autovine_env/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
35. __import__(name)
File "/home/cath/src/autovine/autovine/urls.py" in <module>
33. include('front.urls', namespace="front")
File "/home/cath/virtualenvs/autovine_env/local/lib/python2.7/site-packages/django/conf/urls/__init__.py" in include
25. urlconf_module = import_module(urlconf_module)
File "/home/cath/virtualenvs/autovine_env/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
35. __import__(name)
File "/home/cath/src/autovine/autovine/apps/front/urls.py" in <module>
8. IndexView.as_view(),
Exception Type: NameError at /
Exception Value: name 'IndexView' is not defined
2 ответа
Вы получаете ошибку, потому что вы не импортировали IndexView
в текущем пространстве имен. Вы импортировали views
, IndexView
доступен только в пределах views
пространство имен - т.е. views.IndexView
,
Вы должны переписать свое заявление на импорт -
from yourapp.views import IndexView
Или переписать свой urlconf -
urlpatterns = patterns(' ',
url(r'^$', views.IndexView.as_view(), name='index'),
)
Может быть, прочитайте пространства имен Python - вот что вызывает у вас NameError
исключение.
Кроме того, вы также определили свое представление как функцию, а не класс, как это должно быть -
class IndexView(TemplateView):
скорее, чем def IndexView(TemplateView):
Просто выясни мою ошибку. я кладу def
вместо class
,
def IndexView(TemplateView): //wrong
class IndexView(TemplateView): //correct