我的目录如下
manage.py
base_app/
urls.py
settings.py
etc...
app1/
urls.py
models.py
etc...
当我在app1/urls.py
中包含base_app
时,我的API路由似乎被覆盖。例如,在base_app/urls.py
中,如果我具有以下内容:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
url(r'^schema/$', schema_view),
]
然后,我的架构列出了所有的rest-auth API端点。但是,当我包含app1
urlpatterns = [
url(r'^', include('app1.urls')),
url(r'^admin/', admin.site.urls),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
url(r'^schema/$', schema_view),
]
然后我失去了rest-auth
的端点,而只得到了app1
的端点。我认为问题出在我如何设置app1
的{{1}}还是我如何在urls.py
中错误地使用命名空间。
base_app/urls.py
显示如下(不包括导入):
app1/urls.py
如何正确区分router = DefaultRouter()
router.register(r'app1', views.App1ViewSet, base_name="app1")
urlpatterns = router.urls
和rest-auth
的API之间的命名空间?
答案 0 :(得分:0)
您已经通过将所有URL放在首位并匹配MEMBER [Measures].[N Tiendas AA 2] AS ( PARALLELPERIOD( [Tiempo].[Periodos].[Ano] , 1 , STRTOMEMBER( @pPrevAno, CONSTRAINED ) ),[Measures].[N Tiendas] )
(匹配字符串的开头,实际上是任何字符串)来将所有URL解析为app1.urls
。
最后移动您的^
URL,使其成为一个包罗万象的:
app1
一个更好的解决方案是将起始URL放在根URL模式中,这样,当您有多个应用程序时,所有应用程序都根据起始URL命名所有的URL:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
url(r'^schema/$', schema_view),
url(r'^', include('app1.urls')),
]
然后,您可以在urlpatterns = [
url(r'^app1/', include('app1.urls')),
...
...
]
网址定义中省略起始部分,即在app1
之后使用该部分,例如:
/app1/
FWIW,在受支持的版本上,您应该使用router.register(r'foobar/$', views.App1FooBar) # resolves to `/app1/foobar/`
来匹配URL,而不是正则表达式匹配(path
FWIW仍然支持)。