Mes routeurs DRF spécifient un espace de noms afin que je puisse reverse
mes URL:
urls.py:
router = DefaultRouter()
router.register('widget/', MyWidgetViewSet, base_name='widgets')
urlpatterns =+ [
url(r'/path/to/API/', include(router.urls, namespace='widget-api'),
]
Ce qui, lors de la mise à niveau vers Django 2, donne:
Django.core.exceptions.ImproperlyConfigured: La spécification d'un espace de nom dans include () sans fournir de nom_app n'est pas prise en charge. Définissez l'attribut app_name dans le module inclus ou transmettez plutôt un 2-Tuple contenant la liste des modèles et app_name.
Django 2 requiert maintenantapp_name
si la variable namespace
kwarg est spécifiée lors de l’utilisation de include
. Quelle est la bonne façon de spécifier app_name
lorsque les modèles d'URL sont construits par un routeur URL DRF? Je ne pense pas que la documentation est à jour pour Django 2 à ce sujet.
Vous devez mettre app_name = 'x'
dans le fichier url.py
de votre application. C'est un peu enfoui dans la documentation:
https://docs.djangoproject.com/fr/2.0/topics/http/urls/#id5
Par exemple, si dans /project/project/urls.py
vous avez:
path('', include('app.urls', namespace='app'))
Ensuite, dans le fichier url correspondant (dans /project/app/urls.py
), vous devez spécifier le paramètre app_name
avec:
app_name = 'app' #the weird code
urlpatterns = [
path('', views.index, name = 'index'), #this can be anything
]
Vous devez inclure le fichier router.urls en tant que tuple et ajouter le nom de l'application au tuple au lieu d'inclure uniquement le fichier router.urls.
Selon votre exemple, vous devriez essayer quelque chose comme:
router = DefaultRouter()
router.register('widget/', MyWidgetViewSet, base_name='widgets')
urlpatterns =+ [
url(r'/path/to/API/', include((router.urls, 'my_app_name'), namespace='widget-api'),
]
L'approche recommandée est
from Django.conf.urls import url, include
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'widget/', MyWidgetViewSet)
urlpatterns = [
url(r'^path/to/API/', include('rest_framework.urls', namespace='widget-api'))
]
Voir http://www.tomchristie.com/rest-framework-2-docs/tutorial/quickstart#urls