我的DRF路由器指定了一个名称空间,以便我可以 reverse
我的网址:
urls.py:
router = DefaultRouter()
router.register('widget/', MyWidgetViewSet, base_name='widgets')
urlpatterns =+ [
url(r'/path/to/API/', include(router.urls, namespace='widget-api'),
]
在升级到django 2时,它给出:
django.core.exceptions.ImproperlyConfigured:不支持在include()中指定名称空间而不提供app_name . 在包含的模块中设置app_name属性,或者传递包含模式列表和app_name的2元组 .
Django 2 now requires app_name
如果在使用 include
时指定了 namespace
kwarg . 当url模式由DRF url路由器构建时,指定 app_name
的正确方法是什么?我不认为the documentation是关于这个主题的django 2的最新版本 .
3 回答
您需要将
app_name = 'x'
放在应用程序的url.py
文件中 . 这有点埋没在文档中:https://docs.djangoproject.com/en/2.0/topics/http/urls/#id5
例如,如果在
/project/project/urls.py
中您有:然后在相应的url文件中(在
/project/app/urls.py
中),你需要指定app_name
参数:您需要将router.urls包含为元组并将应用程序名称添加到元组而不是仅包含router.urls
根据你的例子你应该尝试类似的东西:
推荐的方法是
见http://www.tomchristie.com/rest-framework-2-docs/tutorial/quickstart#urls