TypeError:包含另一个urls.py时,视图必须是可调用的或列表/元组[重复]

Posted

技术标签:

【中文标题】TypeError:包含另一个urls.py时,视图必须是可调用的或列表/元组[重复]【英文标题】:TypeError: view must be a callable or a list/tuple when including another urls.py [duplicate] 【发布时间】:2018-10-07 03:06:11 【问题描述】:

我已经仔细阅读了涵盖该主题的其他几个问题,但是,没有一个描述 include() 的情况(包括另一个 urls.py 文件)。我还查看了 1.11 文档 here 并按照它进行了编码,但是,我不断收到错误消息“TypeError: view must be a callable or a list/tuple in the case of include()”。几乎尝试了这个和其他两个答案的所有推导无济于事。我的错误/误解在哪里?

urls.py

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^atfl/', include('atfl.urls'), namespace="atfl"),
]

atfl/urls.py 中的代码

from django.conf.urls import url
from atfl.views import home, people

urlpatterns = [
    url(r'^$', 'home', name='home'),
    url(r'^people/$', 'people', name='people'),
]

atfl/views.py 中的代码

from django.shortcuts import render_to_response

def index(request):
    return render_to_response('atfl/home.html', )

def LoadTextFile(request):
    return render_to_response("atfl/people.html", )

【问题讨论】:

【参考方案1】:

错误不是来自include,而是来自您尝试包含的urls.py 中的字符串'home''people'。使用您已经导入的视图:

from atfl.views import home, people

app_name = 'atfl'

urlpatterns = [
    url(r'^$', home, name='home'),
    url(r'^people/$', people, name='people'),
]

一旦您修复了该问题,您的include 中就有一个您应该修复的错误。命名空间是include 的参数,即include('atfl.urls', namespace='atfl')。你把它作为url() 的参数。但是,在这种情况下,您应该从该 URL 模式中完全删除命名空间,并将 app_name 添加到应用程序的 urls.py 中。

url(r'^atfl/', include('atfl.urls')),

最后,不要使用render_to_response。它已经过时了。请改用render

from django.shortcuts import render_to_response

def index(request):
    return render(request, 'atfl/home.html', )

【讨论】:

【参考方案2】:

你不应该在 atfl/urls.py 中使用字符串:

from django.conf.urls import url
from atfl.views import home, people

urlpatterns = [
    url(r'^$', home, name='home'),
    url(r'^people/$', people, name='people'),
]

【讨论】:

以上是关于TypeError:包含另一个urls.py时,视图必须是可调用的或列表/元组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django urls.py报错: raise TypeError('view must be a callable or a list/tuple in the case of includ

Django 之 include包含其它urls

Django - 直接从 urls.py 渲染 HTML 模板

Django url 模式不是注册的视图函数或模式

TypeError: view must be a callable or a list/tuple in the case of include()

包含 Django 应用程序的 url.py 会导致 404