如何包含Django应用程序中的部分url模式



我有两个带有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_。

有一些潜在的解决方案,但没有一个对我来说效果很好:

  1. 使用非段塞url2,如~url2。这意味着app2中的所有urls都必须以类似~^的内容开头。

  2. 在主urlpatterns中重新定义一些URL,但随后我将不得不从应用程序中导入views并从应用程序urlpattern中删除URL。

  3. 使用正则表达式从<slug:username>中显式排除某些名称。这是可行的,但是app2url模式中的任何更改都需要反映在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

相关内容

  • 没有找到相关文章

最新更新