urls namespace from app_name python django namespaces django-urls

python - from - include namespace django



ImpropyConfiguredError sobre app_name al usar el espacio de nombres en include() (6)

Actualmente estoy probando django. Uso el argumento del namespace en uno de mis include() s en urls.py. Cuando ejecuto el servidor e intento 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<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é paso el app_name como se indica en el mensaje de error?


Django 1.11+, 2.0+

Debe establecer el nombre_aplicación en el archivo de URL que está incluyendo

# reviews/urls.py <-- i.e. in your app''s urls.py app_name = ''reviews''  

Luego puede incluirlo de la manera en que lo está haciendo.

Además, puede valer la pena señalar lo que dicen los documentos de Django 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_aplicación como se explica en los espacios de nombres de URL y en su lugar incluye URLconfs.

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


Consulta los documentos para incluirlos here .

Lo que ha hecho no es una forma aceptable de pasar parámetros para incluir. Podrías hacerlo:

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


Django 2.0 debe especificar app_name en su urls.py , no es necesario especificar el argumento app_name en include.

Archivo de 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 incluida

from django.urls import path from . import views app_name = ''main_app'' urlpatterns = [ path('''', views.index, name=''index''), ]

Luego use el uso en la plantilla como

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

Más detalles: https://code.djangoproject.com/ticket/28691 Django 2.0 Docs


En mi caso, estaba escribiendo las URL fuera de la lista de patrones de url. Revisa otra vez, por favor.


Incluí una biblioteca que aún no es (totalmente) compatible con django 2.1 (django_auth_pro_saml2). Por lo tanto, 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.


También me enfrento al mismo error en Django 2.2 y lo resuelvo de esta manera

archivo urls.py

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

archivo de encuestas / urls.py

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

ejemplo de uso del espacio de nombres en el método de vista basado en calss

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

ejemplo de uso del espacio de nombres en plantillas

{% url ''polls:index'' %}

Aquí encuestas: index mean app_name [definir en el archivo polls / urls.py ]: nombre [definir en el archivo polls / urls.py dentro de la función de ruta]

su oficial, que es bastante bueno, puedes consultar para obtener más información namespace_django_official_doc