django - 如何包含来自 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'),
]
因为url2/
会首先匹配<slug:username>/
并触发未知用户名的错误。
有一些潜在的解决方案,但没有一个对我很有效:
使用非蛞蝓
url2
如~url2
. 这意味着 allurls
in必须从orapp2
之类的东西开始。~
^
在 master 中重新定义一些 URL,
urlpatterns
但是我必须从应用程序中导入views
并从应用程序中删除 urlurlpattern
。使用正则表达式从
<slug:username>
. 这可以工作,但是urlpatterns 中的任何更改app2
都需要反映在.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
]
这样固定名称的 URL 将在之前匹配<slug:username>
?
解决方案
来自Django 文档:
包括((模式列表,app_namespace),命名空间=无)
参数:
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 中元组的第一个元素是path/re_path
要包含的实例列表,第二个元素是app name
.
推荐阅读
- javascript - 如何修复“ReferenceError:未定义矩阵”
- java - 如何避免小程序“你想运行这个应用程序吗?” 弹出消息
- javascript - 如何将 Int32 存储到 ArrayBuffer 中
- java - 在所有递归调用从调用堆栈中弹出之前返回最终结果的递归函数
- reactjs - '"Page Not Found 404"' 类型的参数不能分配给 '{ error: string; 类型的参数;} & { 孩子?:反应节点;}'
- random - 生成随机持续时间
- xaml - Xaml 布局,框到另一个框的左角
- reactjs - 从 Context Consumer 传递参数会导致“TypeError”:...不是函数
- c++ - C++。gtk_window_resize 不调整窗口大小
- php - 如何使用一个按钮或按 Enter 在一页上提交多个表单