You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中从URL获取PK并在新链接中使用的技术问题

嘿,我来帮你搞定这段Django代码的问题,顺便教你怎么用拿到的PK生成新链接~

首先看你当前代码里的几个小问题,咱们逐个解决:

1. URL和视图参数不匹配

你在urls.py里定义的路径参数是<int:item_category>,但视图函数的参数写的是pk,这会导致Django没法正确把URL里的数值传递给视图。两种修正方式选一个就行:

  • 要么改URL的参数名:
# urls.py
path('categories/<int:pk>/', views.item_category, name="item_category"),
  • 要么改视图的参数名,把pk换成item_category,后续代码里的pk也跟着替换。

推荐第一种,毕竟pk是Django里约定俗成的主键参数名。

2. 视图函数里的逻辑错误

原视图里有两个明显问题:

  • 函数视图里不能用self.kwargs,这是类视图的写法,函数视图要拿参数的话,要么直接用传入的pk,要么用request.kwargs.get('pk'),不过既然参数已经传进来了,直接用pk更简单。
  • 你已经用get_object_or_404拿到了Categories对象,没必要再用Categories.objects.get(pk=ids)重复查询,而且你把pk放到列表里去查,肯定会报错,因为主键是整数,不是列表。

修正后的视图应该是这样:

# views.py
from django.shortcuts import get_object_or_404, render
from .models import Categories

def item_category(request, pk):
    # 用pk获取分类对象,不存在就返回404页面
    item_category = get_object_or_404(Categories, pk=pk)
    # 如果模板需要单独的分类ID,直接传pk就行,不用再查一次
    return render(request, 'items_modal.html', {
        'item_category': item_category,
        'cat_id': pk
    })

3. 在HTML里用PK生成新链接

假设你要在模板里用拿到的cat_id构建新链接,比如跳转到该分类下的商品列表,直接用Django的url模板标签就行:

<!-- 示例:生成指向该分类商品的链接 -->
<a href="{% url 'your_new_url_name' cat_id %}">查看此分类下的所有内容</a>

这里的your_new_url_name是你在urls.py里给新路径起的名字,比如你新增一个路径:

# urls.py
path('categories/<int:pk>/details/', views.category_details, name="category_details"),

把your_new_url_name换成category_details,就能把cat_id作为pk传递到新视图里,获取对应结果啦。

内容的提问来源于stack exchange,提问作者Ahmed Wagdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:23:58