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

Posted

技术标签:

【中文标题】单击 django 中的 href 链接时出现意外/不需要的 url 路径【英文标题】:getting unexpected/unwanted url path when clicking on an href link in django 【发布时间】:2021-03-05 13:37:27 【问题描述】:

所以,这是我定义的所有网址:

path("", views.index, name="index"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
path("new", views.new.as_view(), name="new"),
path("<int:user>/watchlist", views.watchlist, name="watchlist"),
path("<int:user>/<str:name>", views.name, name="name"),
path("<str:user>/<str:name>/watchlist/remove", views.remove, name="remove-from-watchlist"),
path("<int:user>/<str:name>/watchlist/add", views.add, name="add-to-watchlist"),
path("<str:user>/<str:name>/bid", views.bid, name="bid"),
path("<str:user>/<str:name>/close", views.close, name="close-bid"),
path("<str:user>/<str:name>/comment", views.comment, name="comment"),
path("add-category", views.addC, name="add-Category"),
path("categories", views.categories, name="categories"),
path("<str:cat>/category", views.cat, name="category-page")

根据经验,问题出在所有与“关注列表”相关的 URL 上。 例如,当我在索引视图中时,path("&lt;int:user&gt;/watchlist", views.watchlist, name="watchlist"), 的路径是&lt;a class="nav-link" href=" user.id /watchlist"&gt;Watchlist&lt;/a&gt; 并且url路径显示相同-

http://127.0.0.1:8000/2/watchlist 其中 2 是用户 ID。然后,当我转到 url &lt;a class="nav-link" href="categories"&gt;Categories&lt;/a&gt; 时,遵循的 url 路径是 http://127.0.0.1:8000/2/categories '2' 不应该在那里!我专门硬编码了锚标记中的路径

我面临另一个问题: 当我在索引视图中并单击包含&lt;a href=/ user.id / item.Title 的锚标记时 其中 item.Title 是“Magic Broom”,我得到的 url 路径是

http://127.0.0.1:8000/2/Magic 虽然它应该是 http://127.0.0.1:8000/2/Magic扫帚

谁能解释一下这里发生了什么...

【问题讨论】:

对绝对 URL 使用前导斜杠,例如&lt;a href="/categories"&gt;. 对于第二期,我希望链接是http://127.0.0.1:8000/2/Magic%20Broom。一种常见的方法是给你的模型添加一个SlugField,然后你会得到像/2/magic-broom这样的URL。 @Alasdair 我刚刚使用了 urllib.parse 库中的 'quote()' 函数。它将“”设置为“%20” 【参考方案1】:

正确的反向路径是这样的:

path("<int:user>/watchlist", views.watchlist, name="watchlist")


<a href="% url 'watchlist' user=xyz %"> some text </a>

在您的示例中,您“手动”构建了 url,而您应该始终通过 % url ... % 完成的 path->name 定义进行反向操作。为什么?如果您的网址发生更改,您只需更新 settings.py 中的路径

【讨论】:

是的,此方法适用于设置正确的 url 路径。

以上是关于单击 django 中的 href 链接时出现意外/不需要的 url 路径的主要内容,如果未能解决你的问题,请参考以下文章

Django-nonrel + Django-registration 问题:重置密码时出现意外的关键字参数“uidb36”

Selenium VBA Excel - 单击 iframe 中的链接时出现问题

尝试重置密码时出现 Djongo + Django + MongoDB Atlas DatabaseError

Opengl:尝试绘制线条以可视化鼠标射线投射时出现意外行为

替换文本文件中的单个字符时出现意外结果

复制Facebook的共享代码时出现“程序中的意外@”[关闭]