问题描述
我有两个带有 URL 的 Django 应用
controller
和
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
因为 urlpatterns = [
path('',include('app1.urls'),path('',include('app2.urls'),]
会首先匹配 url2/
并触发未知用户名的错误。
-
使用非 slug
<slug:username>/
,例如url2
。这意味着~url2
中的所有urls
都必须以app2
或~
之类的内容开头。 -
在主
^
中重新定义一些网址,但随后我将不得不从应用程序中导入urlpatterns
并从应用程序views
中删除网址。 -
使用正则表达式从
urlpattern
中明确排除某些名称。这可以工作,但<slug:username>
urlpatterns 中的任何更改都需要反映在app2
的app1
中。
可以做类似的事情
<slug:username> ... exclude certain names
这样固定名称的 URL 将在 urlpatterns = [
path('',# non-user part
path('',# user part
path('',# user part
]
之前匹配?
解决方法
来自Django docs:
include((pattern_list,app_namespace),namespace=None)
参数:
pattern_list – 可迭代的 path() 和/或 re_path() 实例。
app_namespace (str) – URL 条目的应用程序命名空间 包括
您可以使用此方法包含特定网址:
urlpatterns = [
path('',include(([path('url1/',<YourViewName>)],'app1'))),path('',include(([path('url2/','app2'))),include(([path('<slug:username>/',include(([path('<slug:username>/action2/',< YourViewName >)],]
include 中元组的第一个元素是您要包含的 path/re_path
实例列表,第二个元素是 app name
。