Django如何通过对象ID正确跳转,解决{% url %}标签及URL拼接错误问题
正确修正方法
方案1(推荐:使用Django原生url模板标签)
你之前的{% url %}写法存在语法错误,参数不能直接拼接在路由名称的字符串里,需要作为标签的额外参数传入,同时标签内部调用变量不需要再加{{ }}包裹。
直接修改productview.html里的按钮代码即可:
<button onclick="window.location.href='{% url 'Checkout' objects.id %}'">
该写法会自动根据你urls.py中配置的路由规则生成正确的绝对路径,后续如果调整路由路径只要修改urls.py即可,不需要同步修改模板代码。
方案2(手动写绝对路径)
如果你要手动写路径,需要在路径开头加/声明是根路径开始的绝对路径,避免相对路径基于当前页面URL拼接的问题:
<button onclick="window.location.href='/Store/Checkout/{{objects.id}}'">
该方案不推荐,若后续上级路由的Store/前缀修改,所有手动写的路径都需要同步调整。
补充优化建议
建议你修改urls.py中的路径配置,给动态路径加上尾部斜杠,适配Django默认的APPEND_SLASH机制,避免不必要的301重定向:
urlpatterns = [ path('', views.Store, name= "Store"), path('Checkout/<id>/', views.createlocation, name="Checkout"), path('Product/<id>/', views.product_details, name="Product") ]
内容的提问来源于stack exchange,提问作者The Ultraempoleon
相关产品推荐
相关产品推荐

