TypeError: представление должно быть вызываемым или списком/кортежем при включении другого urls.py

Я внимательно прочитал несколько других вопросов, касающихся этой темы, однако ни один из них не описывает случай include() (включая другой файл urls.py). Я также просмотрел документацию 1.11 здесь и закодирован в соответствии, однако я постоянно получаю сообщение об ошибке «TypeError: представление должно быть вызываемым или списком/кортежем в случае 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", {})

person RigidBody    schedule 26.04.2018    source источник


Ответы (2)


Ошибка не из include, а из строк 'home' и 'people' в urls.py, которые вы пытаетесь включить. Используйте представления, которые вы уже импортируете:

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', {})
person Alasdair    schedule 26.04.2018

Вы не должны использовать строки в 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'),
]
person Masha Kereb    schedule 26.04.2018