单击 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("<int:user>/watchlist", views.watchlist, name="watchlist"),
的路径是<a class="nav-link" href=" user.id /watchlist">Watchlist</a>
并且url路径显示相同-
http://127.0.0.1:8000/2/watchlist 其中 2 是用户 ID。然后,当我转到 url
<a class="nav-link" href="categories">Categories</a>
时,遵循的 url 路径是 http://127.0.0.1:8000/2/categories '2' 不应该在那里!我专门硬编码了锚标记中的路径
我面临另一个问题:
当我在索引视图中并单击包含<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 使用前导斜杠,例如<a href="/categories">
.
对于第二期,我希望链接是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