ImpropyConfiguredError sobre app_name cuando se usa el espacio de nombres en include ()

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

Django 1.11+, 2.0+

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.