web-dev-qa-db-fra.com

ImpropyConfiguredError à propos de nom_app lors de l'utilisation d'un espace de nom dans include ()

Je suis en train d'essayer Django. J'utilise l'argument namespace dans l'un de mes include()s dans urls.py. Lorsque j'exécute le serveur et que j'essaie de naviguer, j'obtiens cette erreur.

File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\Django\urls\conf.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.

Voici mes fichiers urls.py:

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

et

#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 que je passe le app_name comme indiqué dans le message d'erreur?

74
Nelson M

Vérifiez la documentation pour inclure ici .

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

url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews')),
107
unixia

Django 1.11+, 2.0 +

Vous devez définir le nom_appli dans le fichier urls 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.

Vous pouvez également noter ce que Django docs dit ici https://docs.djangoproject.com/fr/1.11/ref/urls/#include :

Déconseillé depuis la version 1.9: la prise en charge de l'argument app_name est obsolète et sera supprimée dans Django 2.0. Spécifiez le nom_application comme expliqué dans les espaces de noms d'URL et incluez URLconfs à la place.

( https://docs.djangoproject.com/fr/1.11/topics/http/urls/#namespaces-and-include )

62
Bob

Django 2.0, vous devez spécifier app_name dans votre urls.py , n'est pas nécessaire de spécifier l'argument app_name sur include.

Fichier principal de l'URL.

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

Puis utilisez use in template as

<a href="{% url main_app:index' %}"> link </a>

Plus de détails: https://code.djangoproject.com/ticket/28691Django 2.0 Docs

23
Brayan Loayza

J'ai inclus une bibliothèque non (totalement) Django 2.1 compatible (Django_auth_pro_saml2). Par conséquent, je crée un deuxième fichier saml_urls.py:

from Django_saml2_pro_auth.urls import urlpatterns

app_name = 'saml'

Tels que je pourrais inclure les URL comme:

from Django.urls import include, re_path as url

urlpatterns = [
    ..., url(r'', include('your_app.saml_urls', namespace='saml')), ...
]

Hacky, mais cela a fonctionné pour moi, alors que la url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews')) ne fonctionnait pas.

3
Herbert

Dans mon cas, j’écrivais les URL en dehors de la liste urlpatterns. S'il vous plaît revérifier.

0
coderanger

Je suis aussi confronté à la même erreur dans Django 2.2 et je le résous de cette façon.

fichier urls.py

urlpatterns = [
   path('publisher-polls/', include('polls.urls', namespace='publisher-polls')),
]

fichier polls/urls.py

app_name = 'polls'
urlpatterns = [
  path('', views.IndexView.as_view(), name='index')
]

exemple d'utilisation de l'espace de noms dans la méthode de vue basée sur calss

def get_absolute_url(self):
    from Django.urls import reverse
    return reverse('polls.index', args=[str(self.id)])

exemple d'utilisation de l'espace de noms dans les modèles

{% url 'polls:index' %}

Ici sondages: index moyenne app_name [définir dans sondages/urls.py fichier ]: nom [définir dans polls/urls.py fichier fonction de chemin d'accès]

leur fonctionnaire qui est assez bon, vous pouvez vérifier pour plus d'informations namespace_Django_official_doc

0
sayalok