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
相关产品推荐
相关产品推荐

