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路径中的错误,找不到未链接到新代码