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
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),
]
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).
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),
]
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.
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'))
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