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

Django如何通过URL链接在视图间传递变量且不使用session?

问题诊断
  • 模板中生成editpage路由时未传递必填的topic参数:你在urls.py中定义的editpage路由明确要求携带str:topic路径参数,但是page.html的跳转链接、editpage.html的表单提交路径都没有传入该参数,会直接触发路由匹配错误。
  • editpage视图未利用路由传递的topic参数:你已经在editpage的视图参数中声明了topic变量,POST请求阶段可以直接调用该变量获取对应主题,不需要额外从POST请求中读取。
  • 编辑页未预填充现有内容:GET请求打开编辑页时没有将对应主题的已有内容填入表单,不符合编辑功能的常规逻辑。
修复方案

1. 修改page.html

将跳转编辑页的链接补充topic参数,直接把当前页面的topic变量传入路由生成逻辑:

{% extends "encyclopedia/layout.html" %}

{% block title %}
    {{ topic }}
{% endblock %}

{% block body %}
    <!-- 补充topic参数生成正确的编辑页路径 -->
    <a href="{% url 'editpage' topic=topic %}">Edit this page</a><br>
    {{ content }}
{% endblock %}

2. 修改views.py的editpage视图

直接使用路由传入的topic参数,GET请求时预填充表单内容,POST请求时直接用该参数处理保存逻辑:

def editpage(request, topic):
    # 提前校验主题是否存在
    if not util.get_entry(topic):
        return render(request, "encyclopedia/notfound.html")
        
    if request.method == "POST":
        # 直接使用路由传递的topic参数,不需要从POST中读取
        new_content = request.POST.get("content")
        # 调用你的保存逻辑,比如util.save_entry(topic, new_content)
        util.save_entry(topic, new_content)
        # 编辑完成后跳回对应主题的详情页
        return HttpResponseRedirect(reverse("page", args=[topic]))

    else:
        # GET请求时预填充表单的现有内容
        current_content = util.get_entry(topic)
        form = NewSubmissionForm(initial={"content": current_content})
        return render(request, "encyclopedia/editpage.html", {
            "form": form,
            "topic": topic # 将topic传递给模板用于生成表单提交路径
        })

注:以上代码假设你的NewSubmissionForm表单类中用于提交内容的字段名为content,可根据你实际的表单定义调整字段名。

3. 修改editpage.html

给表单提交路径补充topic参数:

{% extends "encyclopedia/layout.html" %}

{% block title %}
    Edit Page 
{% endblock %}

{% block body %}
    <h1>Edit page</h1>

    <!-- 补充topic参数生成正确的提交路径 -->
    <form action="{% url 'editpage' topic=topic %}" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="submit">    
    </form>
{% endblock %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:04