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
Другие вопросы по тегам