Actualmente estoy probando django. Utilizo el argumento del namespace
en uno de mis include()
s en urls.py. Cuando ejecuto el servidor y trato de navegar, aparece este error.
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.
Estos son mis archivos 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)), ]
y
#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[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[0-9]+)/$', views.wine_detail, name='wine_detail'), ]
¿Qué paso al app_name
la app_name
como se indica en el mensaje de error?
Compruebe los documentos para incluir aquí .
Lo que has hecho no es una forma aceptable de pasar parámetros para incluir. Podrías hacerlo:
url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews')),
Debe establecer el nombre de la aplicación en el archivo urls que está incluyendo
# reviews/urls.py <-- ie in your app's urls.py app_name = 'reviews'
Entonces puedes incluirlo en la forma en que lo estás haciendo.
Además, podría valer la pena señalar lo que los documentos de Django dicen aquí https://docs.djangoproject.com/en/1.11/ref/urls/#include :
En desuso desde la versión 1.9: el soporte para el argumento nombre_aplicación está en desuso y se eliminará en Django 2.0. Especifique el nombre de la aplicación como se explica en los espacios de nombres de URL e incluyó URLconfs en su lugar.
( https://docs.djangoproject.com/en/1.11/topics/http/urls/#namespaces-and-include )
Django 2.0 debe especificar app_name en su urls.py , no es necesario especificar el argumento app_name en include.
Archivo principal de url.
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('', include('apps.main.urls')), path('admin/', admin.site.urls), ]
Incluido url.
from django.urls import path from . import views app_name = 'main_app' urlpatterns = [ path('', views.index, name='index'), ]
A continuación, utilice el uso en la plantilla como
link
Más detalles: https://code.djangoproject.com/ticket/28691 Django 2.0 Docs
Incluí una biblioteca no (completamente) compatible con django 2.1 todavía (django_auth_pro_saml2). Por eso creo un segundo archivo saml_urls.py
:
from django_saml2_pro_auth.urls import urlpatterns app_name = 'saml'
Tal que podría incluir las URL como:
from django.urls import include, re_path as url urlpatterns = [ ..., url(r'', include('your_app.saml_urls', namespace='saml')), ... ]
Hacky, pero funcionó para mí, mientras que la url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews'))
no lo hizo.
En mi caso, estaba escribiendo las URL fuera de la lista de patrones de URL. Revisa otra vez, por favor.