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?
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')),
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 )
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
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.
Dans mon cas, j’écrivais les URL en dehors de la liste urlpatterns. S'il vous plaît revérifier.
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