Django中的动态链接总是调用第一个url路径

Posted

技术标签:

【中文标题】Django中的动态链接总是调用第一个url路径【英文标题】:Dynamic link in Django always calls the first url path 【发布时间】:2022-01-11 02:40:09 【问题描述】:

urlpatterns 内的urls.py 中我有以下两行

urlspatterns = [
...
path('<slug:productSlug>', ProductView.as_view(), name = 'viewProduct'),
path('<slug:boxSlug>', BoxView.as_view(), name = 'BoxView'),
...
]

在我的 html 模板中有两个链接

<a href="% url 'viewProduct' item.productSlug %" class="btn btn-outline-primary" tabindex="-1" role="button" aria-disabled="true">product view</a>

<a href="% url 'BoxView' item.boxSlug %" class="btn btn-outline-primary" tabindex="-1" role="button" aria-disabled="true">Box View</a>

问题是即使我在 % url 'BoxView' ... % 中指定了 BoxView,它仍然会调用 viewProduct 路径。如果我在 urlPatterns 中颠倒两条路径的顺序,它会一直调用“BoxView”。我不明白的是它一直调用它首先在urlPatterns 中找到的任何东西。

【问题讨论】:

两条路径完全重叠,因此它会总是触发第一条路径。您需要使它们不重叠,例如通过向两个 URL 添加不同的前缀 我不确定我是否完全理解。在 % url 'BoxView'....% 中不应该调用名称为 'BoxView' 的路径,而在 % url 'viewProduct' % 中不应该调用名称为 '查看产品'? 它将转换为 URL。但是由这两者构造的每个 URL 都会触发第一个匹配的 URL 路径,在本例中为 ProductView 感谢您详细说明。 urlPatterns 中是否应该添加 url 前缀?你能举个例子吗? 【参考方案1】:

你要区分视图类型。例如,您可以:

urlspatterns = [
...
path('product_view/<slug:productSlug>', ProductView.as_view(), name = 'viewProduct'),
path('box_view/<slug:boxSlug>', BoxView.as_view(), name = 'BoxView'),
...
]

【讨论】:

以上是关于Django中的动态链接总是调用第一个url路径的主要内容,如果未能解决你的问题,请参考以下文章

如何修复Django添加URL路径中的错误,找不到未链接到新代码

django app中urls怎么获取主urls中的链接

单击 django 中的 href 链接时出现意外/不需要的 url 路径

姜戈 |动态 URL 中的 JS 变量

django2获取url所有路径

Django中的 动态URL配置