我有两个带有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
中,这将不起作用
urlpatterns = [
path('', include('app1.urls'),
path('', include('app2.urls'),
]
因为CCD_ 2将首先匹配CCD_。
有一些潜在的解决方案,但没有一个对我来说效果很好:
使用非段塞
url2
,如~url2
。这意味着app2
中的所有urls
都必须以类似~
或^
的内容开头。在主
urlpatterns
中重新定义一些URL,但随后我将不得不从应用程序中导入views
并从应用程序urlpattern
中删除URL。使用正则表达式从
<slug:username>
中显式排除某些名称。这是可行的,但是app2
url模式中的任何更改都需要反映在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
]
以便在CCD_ 17之前匹配固定名称URL?
来自Django文档:
include((pattern_list,app_namespace),namespace=None)
参数:
pattern_list–path()和/或re_path()实例的可迭代性。
app_namespace(str)–URL条目的应用程序命名空间包括
您可以使用以下方法包含特定的URL:
urlpatterns = [
path('', include(([path('url1/', <YourViewName>)], 'app1'))),
path('', include(([path('url2/', <YourViewName>)], 'app2'))),
path('', include(([path('<slug:username>/', <YourViewName>)], 'app1'))),
path('', include(([path('<slug:username>/action2/', < YourViewName >)], 'app2'))),
]
include中tuple的第一个元素是要包含的path/re_path
实例的列表,第二个元素是app name
。