'Spécifier un espace de noms dans include () sans fournir de nom d'application'
Salut, j'essaie juste django et j'ai respectivement les fichiers url suivants. Cependant, quand je lance le serveur et essaie de parcourir;
Je reçois cette erreur.
File "C:UsersUserAppDataLocalProgramsPythonPython36-32libsite-packagesdjangourlsconf.py", line 39, in include
'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.
Project/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^reviews/', include('reviews.urls', namespace='reviews')),
url(r'^admin/', include(admin.site.urls)),
]
App/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
# ex: /
url(r'^$', views.review_list, name='review_list'),
# ex: /review/5/
url(r'^review/(?P<review_id>[0-9]+)/$', views.review_detail, name='review_detail'),
# ex: /wine/
url(r'^wine$', views.wine_list, name='wine_list'),
# ex: /wine/5/
url(r'^wine/(?P<wine_id>[0-9]+)/$', views.wine_detail, name='wine_detail'),
]
Qu'est-ce qui pourrait mal faire?
3 réponses
Django 1.11+, 2.0+
Vous devez définir le nom_app dans le fichier URL que vous incluez
# reviews/urls.py <-- i.e. in your app's urls.py
app_name = 'reviews'
Ensuite, vous pouvez l'inclure comme vous le faites.
En outre, il pourrait être intéressant de noter ce que les docs Django disent ici https://docs.djangoproject.com/en/1.11/ref/urls/#include :
Obsolète depuis la version 1.9: le Support de l'argument app_name est obsolète et sera supprimé dans Django 2.0. Spécifiez le nom_app comme expliqué dans L'URL espaces de noms et urlconfs inclus à la place.
( https://docs.djangoproject.com/en/1.11/topics/http/urls/#namespaces-and-include )
Django 2.0, vous devez spécifier app_name votre urls.py, n'est pas nécessaire de spécifier app_name argument sur inclure.
Fichier Url principal.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('apps.main.urls')),
path('admin/', admin.site.urls),
]
Url Incluse.
from django.urls import path
from . import views
app_name = 'main_app'
urlpatterns = [
path('', views.index, name='index'),
]
Ensuite, utilisez utiliser dans le modèle comme
<a href="{% url main_app:index' %}"> link </a>
Plus de détails: https://code.djangoproject.com/ticket/28691 Django 2.0 Docs