'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?

32
demandé sur Nelson M 2018-02-04 17:07:39

3 réponses

Vérifiez les documents pour inclure ici .

Ce que vous avez fait n'est pas un moyen acceptable de passer des paramètres à inclure. Vous pourriez faire:

url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews')),
50
répondu unixia 2018-02-04 15:03:30

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 )

24
répondu Bob 2018-05-29 16:38:04

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

7
répondu Brayan Loayza 2018-09-13 15:25:36