Django如何实现跨页面保存数据并跳转回首页?附代码求助
解决保存联系信息后重定向首页的问题
咱们先拆解下你代码里的几个核心问题,这些问题导致你没法正常完成保存后重定向的功能:
1. 视图函数里的实例创建逻辑完全错误
你原来的views.py里直接写new_item=Blogger.email,这其实是获取了Blogger模型的email字段类,根本没有创建具体的实例,更别说保存用户提交的邮箱了。而且你也没处理用户的POST请求数据,等于没拿到用户输入的邮箱。
2. 重定向用硬编码URL不够可靠
直接返回HttpResponseRedirect('/app')属于硬编码路径,如果后续项目的URL配置变动,这个路径就会失效,最好用Django的反向解析功能。
3. 模板链接硬写路径不够灵活
模板里的<a href="/app/lead">同样是硬编码,改用Django的url标签能自动适配URL配置。
下面是修正后的完整代码:
修正后的 views.py
from django.shortcuts import redirect, reverse, render from .models import Blogger def lead(request): # 保存数据必须处理POST请求,GET请求返回表单页面 if request.method == 'POST': # 从POST表单里获取用户输入的邮箱 user_email = request.POST.get('email') if user_email: # 创建Blogger实例并传入邮箱值 new_lead = Blogger(email=user_email) new_lead.save() # 反向解析首页的URL(前提是你给首页URL设置了name='home') return redirect(reverse('home')) # GET请求时返回表单页面 return render(request, 'lead.html')
修正后的 urls.py(要给首页URL加name)
from django.conf.urls import url from . import views urlpatterns = [ # 首页的URL,设置name方便反向解析 url(r'^$', views.index, name='home'), url(r'^lead/$', views.lead, name='lead'), ]
修正后的 index.html 链接
<a href="{% url 'lead' %}" title="add lead">Add lead</a>
补充:提交邮箱的表单页面(新建lead.html)
因为你原来的代码里没有提交邮箱的表单,用户没法输入邮箱,所以需要新增这个模板:
<form method="POST" action="{% url 'lead' %}"> {% csrf_token %} <!-- Django必须的CSRF防护 --> <input type="email" name="email" placeholder="请输入你的邮箱" required> <button type="submit">保存联系信息</button> </form>
这样调整后,用户点击"Add lead"会跳转到表单页面,提交邮箱后就会自动保存并重定向回首页啦。
内容的提问来源于stack exchange,提问作者Mustapha Mohd Sagagi
相关产品推荐
相关产品推荐

