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

Django动态URL过滤数据报错:Reverse not found问题排查

解决Django动态URL反向解析失败及子课程过滤问题

先直接说核心问题:你碰到的Reverse for 'subcourse' with arguments '('',)' not found错误,根源在模板的URL反向解析代码里——你写了{% url 'subcourse' lesson.slug %},但lesson这个变量根本没在视图的上下文里传递,而且按照你的需求,这里应该传的是父课程的slug(毕竟你的URL规则是training/<slug:course>,对应视图接收的是父课程的slug参数)。

下面一步步给你修正方案:

1. 修复模板和视图的上下文传递

首先,你的视图需要把父课程对象也传到模板里,这样模板才能拿到它的slug。修改视图函数:

from django.shortcuts import render, get_object_or_404

def subcourse(request, course_slug):
    if request.method == 'GET':
        # 用get_object_or_404替代get,避免课程不存在时直接崩500错误
        course = get_object_or_404(Course, slug=course_slug)
        # all()可以省略,filter本身就会返回QuerySet
        subcourses = Subcourse.objects.filter(course=course)
        # 把course对象加入上下文,模板需要用它的slug
        context = {'subcourses': subcourses, 'course': course}
        return render(request, 'subcourse.html', context)

然后修改模板里的URL反向解析部分,把不存在的lesson.slug换成course.slug:

{% for subcourse in subcourses %}
<a href="{% url 'subcourse' course.slug %}">
<div class="Training_types_cont">
<img class="Training_types_img" src="{{subcourse.thumbnail.url}}">
<span class="Training_types_txt"> {{subcourse.title}} </span>
</div>
</a>
{% endfor %}

2. 可选优化:让URL和参数名更清晰

你可以把URL配置里的参数名改得更明确,和视图参数保持一致,避免混淆:

path('training/<slug:course_slug>', views.subcourse, name='subcourse')

额外说明

如果你的实际需求是点击子课程跳转到它的详情页(而不是回到当前父课程的子课程列表),那你需要额外配置一个子课程详情的URL,比如:

path('training/<slug:course_slug>/subcourse/<slug:subcourse_slug>', views.subcourse_detail, name='subcourse_detail')

然后在模板里传递course.slug和subcourse.slug两个参数,但根据你当前的报错和代码,先解决现有问题就可以正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:37:32