【发布时间】:2021-05-15 15:05:08
【问题描述】:
我有两个带有 URL 的 django 应用程序
app_name = 'app1'
urlpatterns = [
path('url1/', ..., name='name1')
path('<slug:username>/', ..., name='name2')
]
和
app_name = 'app2'
urlpatterns = [
path('url2/', ..., name='name3')
path('<slug:username>/action2/', ..., name='name4')
]
如果我将它们包含在主 urlpatterns as 中,这将不起作用
urlpatterns = [
path('', include('app1.urls'),
path('', include('app2.urls'),
]
因为url2/ 将首先匹配<slug:username>/ 并触发未知用户名错误。
有一些潜在的解决方案,但没有一个对我很有效:
-
使用非slug
url2,例如~url2。这意味着app2中的所有urls都必须以~或^之类的开头。 -
在主控
urlpatterns中重新定义一些 URL,但是我必须从应用程序中导入views并从应用程序urlpattern中删除 URL。 -
使用正则表达式从
<slug:username>中明确排除某些名称。这可能有效,但app2urlpatterns 中的任何更改都需要反映在app1的<slug:username> ... exclude certain names中。
可以做类似的事情
urlpatterns = [
path('', include('app1.urls'), # non-user part
path('', include('app2.urls'), # non-user part
path('', include('app1.urls'), # user part
path('', include('app2.urls'), # user part
]
以便在<slug:username>之前匹配固定名称的URL?
【问题讨论】:
标签: django include-path url-pattern