如何获取点击的Listing模型项ID?(Django开发场景)
解决Django中通过链接获取Listing ID并生成指定格式URL的问题
你的问题核心是URL模板标签未传递完整参数,导致无法匹配urls.py中定义的路径,进而无法正确获取Listing的ID。以下是具体修正步骤:
1. 修正模板中的链接生成
urls.py里定义的路径是<int:id>/<str:name>,要求传递id和name两个参数。你当前的模板中,部分链接只传了i.id,还有部分没传任何参数,这都会导致URL匹配失败。
把所有Listing相关的链接修改为:
<a href="{% url 'listing' i.id i.name|slugify %}">
i.id:传递Listing的主键IDi.name|slugify:用Django内置过滤器把名称转换成URL友好格式(比如空格替换为横杠、特殊字符转义),让URL更规范。
修正后的index.html关键部分示例:
<!-- 图片链接 --> <a href="{% url 'listing' i.id i.name|slugify %}"> <img src=" {{ i.photo_url }} " alt=""> </a> <!-- 标题链接 --> <a href="{% url 'listing' i.id i.name|slugify %}"> <h4>{{ i.name }}</h4> </a> <!-- 价格、描述链接同理,都要传递两个参数 -->
2. 调整视图函数接收参数
由于urls.py的路径定义了id和name两个参数,视图函数必须接收这两个参数(哪怕name仅用于URL美观,实际查询只用id)。
修改views.py:
from .models import Listing def listing(request, id, name): # 仅用id查询对应的Listing,name参数不参与业务逻辑 listing = Listing.objects.get(pk=id) return render(request, 'auctions/listing.html', { 'listing': listing })
3. 验证效果
修改完成后,点击主页的任意Listing条目,URL会自动生成为http://127.0.0.1:8000/[id]/[slugified-name]的格式,视图通过id参数正确获取到对应的Listing对象,详情页也能正常显示{{ listing.id }}。
内容的提问来源于stack exchange,提问作者tices
相关产品推荐
相关产品推荐

