我问我怎样才能将函数1中定义的Python 2.7
和Django 1.10
变量调用到函数2中。
我定义了一个function1
:
def Test(request) :
form = TestForm(request.POST or None)
if form.is_valid() :
instance = form.save(commit=False)
return HttpResponseRedirect('toto')
context = {
"form" : form,
}
return render(request, 'form_Test.html', context)
我想在instance
:
function2
def Test2(request) :
identity = instance.lastname
context = {
"identity" : identity,
}
return render(request, 'test2_identity.html',context)
我想知道如何处理这个问题?
编辑:
我试图通过预览步骤处理同一视图中的所有内容:
#views.py
def IdentityFormulary(request) :
form = IdentityForm(request.POST or None)
template_name = 'form_Identity.html'
if form.is_valid() :
if '_preview' in request.POST :
post = form.save(commit=False)
template_name = 'preview.html'
#if .is_valid() :
#post=form.save()
elif '_save' in request.POST :
post = form.save()
return HttpResponseRedirect('formulaire_traite')
context = {
"form" : form,
}
return render(request, template_name, context)
def CompletedFormulary(request) :
identity = Identity.objects.all().order_by("-id")[0]
context = {
"identity" : identity,
}
return render(request, 'recapitulatif_identity.html',context)
preview.html文件:
<!--preview.html-->
<h2 align="center"> Prévisualisation du formulaire </align> </h2>
{% block content %}
<h3> Récapitulatif des données enregistrées : </h3>
<li> Civilité : {{form.title}}</li>
<li> Nom : {{form.lastname}}</li>
<li> Prénom : {{form.firstname}}</li>
<li> Sexe : {{form.sex}}</li>
<li> Date de Naissance : {{form.birthday}}</li>
<li> Ville de Naissance : {{form.birthcity}}</li>
<li> Pays de Naissance : {{form.birthcountry}}</li>
<li> Nationalité : {{form.nationality}}</li>
<li> Profession : {{form.job}}</li>
<li> Adresse : {{form.adress}}</li>
<li> Ville : {{form.city}}</li>
<li> Code Postal : {{form.zip}}</li>
<li> Pays : {{form.country}}</li>
<li> Email : {{form.mail}}</li>
<li> Téléphone : {{form.phone}}</li>
{% endblock %}
<br></br>
<input type ="submit" name="_save" value="Valider la fiche individuelle" />
我只是在我的preview.html中使用提交按钮进行屏蔽,因为目前它还没有工作
答案 0 :(得分:2)
简短的回答:你的要求是不可能的,期限。即使是全局变量也不起作用,因为没有任何保证两个请求都将由同一个过程提供服务(即便如此,还会有很多其他无法解决的问题)。
FWIW这实际上是我们在Web开发中大量使用数据库的原因之一 - 因此我们可以在请求之间保持状态(单用户桌面应用程序只能在会话的内存中保持状态)。
现在你在评论中提到
我不想从数据库中搜索,因为我想在验证之前获取数据恢复(类似缓存)。通过这种方式,我可以在提交之前控制数据表单
如果这是你想在两个观点之间分享instance
的原因那么它就不是那样 - 你有form
,表格DO有验证(&# 39; s实际上是django.forms
- 验证用户提交的数据的主要原因),您可以hook into the validation process在不同的点执行任何额外的验证。 IOW:没有理由尝试在两个视图之间共享变量来验证表单。
编辑:好了,我们现在有了XY问题的X部分:
我想得到的是:用户正在填写HTML页面中的表单。然后,他获得了一个简历和2个选项:提交(在MySQL数据库中保存数据)或修改数据表单。第二个选项允许再次填充填充表单,他可以修改一个或多个值,然后提交到数据库
答案是:您不需要两个视图来处理案例,您只需跟踪当前的步骤&#34; (初始提交/预览/编辑/最终提交),这不是真正的火箭科学 - 这可以通过请求方法轻松完成(GET用于空表格,其他任何要求预览,编辑或最终提交)和提交按钮名称(以找出应执行哪个预览/编辑/最终提交操作)。您可以使用form.save(commit=False)
获取未保存的实例(用于预览)。
答案 1 :(得分:0)
这是我如何通过@brunodesthuilliers解决我的问题:
我的views.py文件:
#-*- coding: utf-8 -*-
from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.template import loader
from .models import Identity, Country
from .forms import IdentityForm
def IdentityAccueil(request) :
template = loader.get_template('accueil_Identity.html')
return HttpResponse(template.render(request))
def IdentityFormulary(request) :
form = IdentityForm(request.POST or None)
template_name = 'form_Identity.html'
if form.is_valid() :
if '_preview' in request.POST :
post = form.save(commit=False)
template_name = 'preview.html'
elif '_save' in request.POST :
post = form.save()
return HttpResponseRedirect('formulaire_traite')
context = {
"form" : form,
}
return render(request, template_name, context)
def CompletedFormulary(request) :
identity = Identity.objects.all().order_by("-id")[0]
context = {
"identity" : identity,
}
return render(request, 'recapitulatif_identity.html',context)
我的preview.html文件:
<h2 align="center"> Prévisualisation du formulaire </align> </h2>
<form method='POST' action=''> {% csrf_token %}
{% block content %}
<h3> Récapitulatif des données enregistrées : </h3>
<li> Civilité : {{form.title}}</li>
<li> Nom : {{form.lastname}}</li>
<li> Prénom : {{form.firstname}}</li>
<li> Sexe : {{form.sex}}</li>
<li> Date de Naissance : {{form.birthday}}</li>
<li> Ville de Naissance : {{form.birthcity}}</li>
<li> Pays de Naissance : {{form.birthcountry}}</li>
<li> Nationalité : {{form.nationality}}</li>
<li> Profession : {{form.job}}</li>
<li> Adresse : {{form.adress}}</li>
<li> Ville : {{form.city}}</li>
<li> Code Postal : {{form.zip}}</li>
<li> Pays : {{form.country}}</li>
<li> Email : {{form.mail}}</li>
<li> Téléphone : {{form.phone}}</li>
{% endblock %}
<br></br>
<input type ="submit" name="_save" value="Valider la fiche individuelle" />
</form>