Actualmente estoy probando Django. Uso el argumento del namespace de nombres 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é debo pasar app_name como se indica en el mensaje de error?
Debe configurar app_name en el archivo de URL que está incluyendo
# reviews/urls.py <-- ie in your app's urls.py app_name = 'reviews'Luego puede incluirlo de la forma en que lo está haciendo.
Además, podría 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: la compatibilidad con el argumento app_name está en desuso y se eliminará en Django 2.0. Especifique app_name como se explica en los espacios de nombres de URL e incluya 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 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 use in template como
<a href="{% url main_app:index' %}"> link </a>Más detalles: https://code.djangoproject.com/ticket/28691 Django 2.0 Docs