为什么我的Django项目中request.GET.get("edit")无法正常生效?
问题根因
- 编辑按钮的表单
action配置为直接跳转到create路由,点击按钮后请求不会走到page视图的判断逻辑,request.GET.get("edit")永远不会被触发,session['edit']始终为默认值False - 表单内没有携带
name="edit"的参数,即使请求发到page视图,GET参数中也不存在edit字段,判断条件仍不生效 create视图中title、content变量未提前获取就直接使用,运行会抛出变量未定义异常
修复方案
1. 修改page.html模板表单
将表单提交目标改为当前页面,同时给提交按钮添加name="edit"属性,点击后会携带edit参数请求page视图:
{% block body %} {% if entry %} <h1>{{title}}</h1> {{ entry }} {% endif %} <form action="" method="get"> <input type="submit" name="edit" value="edit" class="button"> </form> {% endblock %}
2. 修改page视图逻辑
检测到edit参数后,更新session状态后直接重定向到create视图,避免重复渲染当前页面:
from django.shortcuts import redirect def page(request,user_input): entry = util.get_entry(user_input) name = user_input.capitalize() request.session['name'] = name request.session['entry'] = entry if request.GET.get("edit"): request.session['edit'] = True # 跳转至create视图 return redirect("create") else: request.session['edit'] = False return render(request, "homepage/page.html", { "entry":entry, "title":name, })
3. 修复create视图异常
补充参数获取逻辑,添加session容错处理,使用完编辑状态后及时清理避免后续误触发:
def create(request): change = request.session.get('edit', False) # 提前获取表单提交的title、content参数 title = request.GET.get('title', '') content = request.GET.get('content', '') if request.GET.get('submit') and title: title = title.lower() if change: util.save_entry(title,content) # 清理已使用的编辑状态 del request.session['edit'] return HttpResponseRedirect('/index') # 补充create页面渲染逻辑,将存储的词条信息传到模板供预填 return render(request, "你的create模板路径", { "title": request.session.get('name', ''), "content": request.session.get('entry', '') })
内容的提问来源于stack exchange,提问作者Rithik Tank
相关产品推荐
相关产品推荐

