TypeError: view должен быть вызываемым или list/tuple в случае include()

Я новичок в django и python. Во время сопоставления url в представлениях я получаю следующую ошибку: TypeError: view должен быть вызываемым или list/tuple в случае include().

Urls. py code: -

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


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^posts/$', "posts.views.post_home"), #posts is module and post_home 
]                                              # is a function in view. 

view.py code: -

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
#function based views

def post_home(request):
    response = "<h1>Success</h1>"
    return HttpResponse(response)

Traceback

введите описание изображения здесь

Ответ 1

В 1.10 вы больше не можете передавать пути импорта до url(), вам нужно передать фактическую функцию просмотра:

from posts.views import post_home

urlpatterns = [
    ...
    url(r'^posts/$', post_home),
]        

Ответ 2

Замените шаблон URL-адреса администратора этим

url(r'^admin/', include(admin.site.urls))

Итак, ваш urls.py становится:

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


urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^posts/$', "posts.views.post_home"), #posts is module and post_home 
] 

URL-адреса admin вызываются include (до 1.9).

Ответ 3

Для Django 1.11.2
В главном urls.py напишите:

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

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

И в файле appname/urls.py напишите:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$',views.post_home),
]

Ответ 4

Ответ находится в project-dir/urls.py

Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))

Ответ 5

Чтобы дополнить ответ от @knbk, мы могли бы использовать шаблон ниже:

, как в 1.9:

from django.conf.urls import url, include

urlpatterns = [
    url(r'^admin/', admin.site.urls), #it not allowed to use the include() in the admin.urls
    url(r'^posts/$', include(posts.views.post_home), 
] 

, как должно быть в 1.10:

from your_project_django.your_app_django.view import name_of_your_view

urlpatterns = [
    ...
    url(r'^name_of_the_view/$', name_of_the_view),
]

Не забудьте создать в your_app_django → views.py функцию для рендеринга вашего представления.

Ответ 6

Вам нужно передать фактическую функцию просмотра

from posts.views import post_home

urlpatterns = [   ...   url (r '^ posts/$', post_home), ]

Это прекрасно! Вы можете прочитать в URL Dispatcher Django и здесь Common Reguler Expressions URL-адреса Django