【问题标题】:Urls.py says my view is not defined (class based view)Urls.py 说我的视图没有定义(基于类的视图)
【发布时间】:2015-07-17 04:43:50
【问题描述】:

这是我的项目的 urls.py:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^CMS/', include('CMSApp.urls')),
    url(r'^admin/', include(admin.site.urls)),
]

这是我的应用程序 (CMSApp) 的 urls.py:

from django.conf.urls import patterns, url

urlpatterns = patterns(
        'CMSApp.views',
        url(r'^users$', user_list.as_view()),
        url(r'^users/(?P<pk>[0-9]+)$', user_detail.as_view()),
)

当我去

CMS/users

它给了我一个名称错误,说

name 'user_list' is not defined

知道为什么吗?

当我这样做时

from CMSApp import views

urlpatterns = patterns(
        '',
        url(r'^users$', views.user_list.as_view()),
)

它有效,但我只是想知道为什么前者不起作用?

【问题讨论】:

    标签: django django-urls django-class-based-views


    【解决方案1】:

    你必须导入

    from CMSApp.views import user_list
    

    否则 django 不会知道 user_list 已定义。

    如果你只使用user_list而不显式导入它,python会认为它是一个局部变量并返回NameError。 一旦在views.py中定义了user_list,你必须明确告诉python在那里搜索它。

    【讨论】:

      【解决方案2】:

      您的项目似乎使用 Django 1.8;您尝试使用的行为已在 1.8 中删除,如下所述:https://docs.djangoproject.com/en/1.8/releases/1.8/#django-conf-urls-patterns

      【讨论】:

      • 这是指将视图引用为字符串,OP 没有这样做。他们只是无法导入模块。
      • @DanielRoseman 我认为 JoeyWihelm 有正确的答案。我知道“从 CMSApp 导入视图”会起作用(我在问题中提到过)。我只是想知道为什么前者不起作用(在我的 urlpatterns 中有'CMSApp.views')。我想知道这是因为即使没有执行“从 CMSApp 导入视图”,如果我输入“'CMSApp.views', url(r'^users$', 'user_list', name='user_list')” 它也可以正常工作(但现在当我使用基于类的视图时,它由于某种原因停止工作)。这是因为,正如 Joey / django 1.8 文档所解释的那样,现在有一种更推荐的方法。
      • 从技术上讲,Daniel Roseman 是正确的,您收到该错误是因为您缺少导入。我忽略了那部分,只是注意到旧样式 urlpatterns 的使用。
      猜你喜欢
      • 2017-12-29
      • 2013-01-25
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2010-12-17
      相关资源
      最近更新 更多