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

Django中带Slug的特定URL跳转失效,自动跳转至首页求助

问题分析与解决方案

核心问题:URL路由冲突

你的urls.py中存在两个无前缀的slug捕获路由:

path('<slug>',views.EachQuiz,name='EachQuiz'),
# ...
path("<slugp>", views.ChangeQuizInfol, name="ChangeQuizInfol"),

Django的URL匹配是从上到下依次匹配,第一个<slug>会捕获所有单段字符串的URL(比如你的correct_slug值),导致ChangeQuizInfol的路由永远不会被触发。如果EachQuiz视图内部有重定向到首页的逻辑,就会出现点击链接后跳转到首页的现象。

解决步骤

1. 修改URL路由,添加前缀区分

给ChangeQuizInfol的路由添加专属前缀(比如change/),避免和其他slug路由冲突:

# urls.py 调整后的内容
urlpatterns = [
    # ... 其他路由保持不变
    path('<slug>',views.EachQuiz,name='EachQuiz'),
    # ... 其他路由保持不变
    # 给ChangeQuizInfol添加前缀
    path("change/<slugp>", views.ChangeQuizInfol, name="ChangeQuizInfol"),
]

2. 更新模板中的URL反向解析

修改lists.html中的链接,匹配新的路由前缀:

<!-- lists.html -->
<a href="{% url "komaki:ChangeQuizInfol" slugp=quiz.correct_slug %}">{{quiz.name}}</a>

此时生成的链接会是/komaki/change/[你的slug值],不会再被EachQuiz的路由捕获。

3. 修复视图中的异常处理(可选但推荐)

你的ChangeQuizInfol视图使用了过于宽泛的try-except,会隐藏错误(比如slug不存在时的DoesNotExist异常),建议细化异常处理:

def ChangeQuizInfol(request,slugp):
    print("changequizinfo is running.")
    co = {}
    if request.method == 'POST':
        print("is post.")
        form = NewAzmoonForms(request.POST)  # 传入POST数据,而非生成空白表单
        # 可补充表单验证与保存逻辑
    else:
        try:
            quiz = QuizStudent.objects.get(slug=slugp)
            print(quiz)
            questions = Questions.objects.filter(quiz_id=quiz.id)
            print(questions)
            form = NewAzmoonForms()
            co = {"quiz": quiz, "form": form, "questions": questions}
        except QuizStudent.DoesNotExist:
            # 处理slug不存在的情况,比如重定向到列表页
            return redirect('komaki:ListsTeacherQuizes')
    return render(request, "komaki/per.html", co)

4. 验证slug参数正确性

确保quiz.correct_slug的值和QuizStudent模型中slug字段的内容完全匹配,避免因参数错误导致视图无法找到对应对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:55:54