web-dev-qa-db-fra.com

TypeError: view doit être un appelable ou une liste/tuple dans le cas de include ()

Je suis nouveau sur Django et python. Lors du mappage d'URL avec les vues, l'erreur suivante s'affiche: TypeError: la vue doit être un objet appelable ou une liste/tuple dans le cas de include ().

Urls. code py: -

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. 

code views.py: -

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

 enter image description here

11
M Pabari

En 1.10, vous ne pouvez plus transmettre les chemins d'importation à url(), vous devez transmettre la fonction d'affichage réelle:

from posts.views import post_home

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

Remplacez votre modèle d'url d'administrateur par ceci

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

Donc, votre urls.py devient:

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 
] 

les URL d'administrateur sont appelables par include (avant le 1.9).

2
kapilsdv

Pour Django 1.11.2
Dans le fichier principal urls.py, écrivez:

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")),
] 

Et dans le fichier appname/urls.py, écrivez:

from Django.conf.urls import url
from . import views

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

Juste pour compléter la réponse de @knbk, nous pourrions utiliser le modèle ci-dessous:

comme en 1.9:

from Django.conf.urls import url, include

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

comme cela devrait être dans 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),
]

N'oubliez pas de créer dans votre_app_Django >> vues.py la fonction pour rendre votre vue.

0
Alex Zwir

La réponse est dans rép_projet/urls.py

 Y compris une autre URLconf 
 1. Importez la fonction include (): depuis Django.conf.urls, importez l’URL, incluez 
 2. Ajoutez une URL à urlpatterns: url (r '^ blog /', include ('blog.urls')) 
0
ashish2py

Vous devez passer la fonction de vue réelle

depuis posts.views import post_home

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

Cela fonctionne bien! Vous pouvez avoir une lecture sur URL Dispatcher Django Et ici Expressions des régulateurs communs Django URLs

0
lavish saluja