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

如何在Django URL中同时传递id与slug参数

问题修复方案

报错的根本原因:你的detail路由规则要求传入game_id和slug两个参数,但反向生成URL时只传入了32147这一个参数,参数数量不匹配导致报错。


修复步骤

1. 排查并修复slug参数为空的问题

报错说明第二个参数未成功传入,大概率是循环变量i的title字段为空,或者自定义slug过滤器处理后返回了空值。你可以先在模板中单独打印{{ i.title|slug }}确认输出是否正常。

如果确实存在空标题的游戏数据,修改自定义过滤器增加兜底逻辑,避免参数缺失:

@register.filter
def slug(value):
    if not value:
        return "untitled-game"
    return slugify(unidecode(value))

2. 统一参数顺序(可选,规避潜在错误)

路由中参数的顺序是game_id在前、slug在后,虽然Django命名参数不强制顺序,建议将视图函数的参数顺序和路由保持一致,避免后续传参混乱:

# 修改views.py中的oyun函数参数顺序
def oyun(request, game_id, slug):
    # 原有逻辑保持不变

3. 补充模型的get_absolute_url方法

你视图中提交评论后调用了oyun.get_absolute_url()做重定向,目前模型未定义该方法,后续提交评论会触发报错,在Oyunlar模型中补充定义即可:

from django.urls import reverse
from django.utils.text import slugify
from unidecode import unidecode

class Oyunlar(models.Model):
    # 原有字段、Meta、__str__逻辑保持不变
    def get_absolute_url(self):
        return reverse('detail', args=[self.game_id, slugify(unidecode(self.title))])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:54:07