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

Django2与Python3下URL模式pk参数匹配错误求助

嘿,我看了你用Python 3 + Django 2实现动态URL的代码,发现几个容易踩的小坑,这就帮你修正并解释清楚~

问题分析与修正步骤

你的代码思路是对的,但存在几处细节问题会导致功能失效,具体如下:

  • URL路径的参数名与视图函数的接收参数名不匹配
  • 模型字段拼写不完整且缺少必填参数
  • 视图内变量名与模型类名存在混淆风险

修正后的完整代码示例

1. urls.py(统一参数名)

# 把路径参数名改为和视图接收参数一致的`pk`
path('categories/<int:pk>/', views.item_category, name="item_category"),

或者如果你想保留参数名item_category,需要同步修改视图函数的参数名:

# urls.py保持原代码的话,views.py要对应调整
def item_category(request, item_category):
    current_category = get_object_or_404(Categories, pk=item_category)
    return render(request, 'items_modal.html', {'item_category': current_category})

2. views.py(修正参数匹配+优化变量名)

from django.shortcuts import get_object_or_404, render
from .models import Categories

def item_category(request, pk):
    # 避免变量名和模型类名混淆,改用`current_category`
    current_category = get_object_or_404(Categories, pk=pk)
    return render(request, 'items_modal.html', {'item_category': current_category})

3. models.py(补全字段定义)

from django.db import models

class Categories(models.Model):
    # CharField必须指定max_length参数,补全拼写并添加参数
    category_name = models.CharField(max_length=255)

    # 建议添加__str__方法,在后台管理和调试时更直观
    def __str__(self):
        return self.category_name

关键说明

  • 参数名一致性:Django会严格按照URL路径里的参数名,把值传递给视图函数对应的参数,两者必须完全匹配,否则会抛出参数不匹配的错误。
  • CharField必填参数:max_length是CharField的强制参数,用于指定数据库字段的最大长度,不设置会直接导致模型迁移失败。
  • 变量名可读性:视图内的变量名尽量避免和模型类名重复,减少代码阅读和调试时的混淆。

内容的提问来源于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:20:52