我试图从一个大的 Django 表单中提取 4 到 5 个字段,并在结果页中显示它们。我希望以相当程度的控制来显示这些值,因为我将根据表单输入内容构建一个包含参数查询字符串的 iFrame。
具体而言,目前我的代码如下:
- forms.py:
from django import forms
from django.forms import extras, ModelForm
from django.utils.safestring import mark_safe
from siteapp.compare.models import Compare
HOWMUCH_CHOICES = (
('', '--------------------------'),
('20000', '20,000'),
('30000', '30,000'),
...
('2000000', '2,000,000'),
)
HOWLONG_CHOICES = (
('', '--------------------------'),
('1', '1 Year'),
...
('39', '39 Years'),
('40', '40 Years'),
)
...etc.
class ComparisonForm(forms.Form):
js = mark_safe(u"document.compareForm.how_much.selectedindex = 4;")
how_much = forms.ChoiceField(choices=HOWMUCH_CHOICES,
widget=forms.Select(attrs={'onMouseOver':'setDefaults()','class':'required validate-selection','title':'Select value of cover required','onLoad': js}))
how_long = forms.ChoiceField(choices=HOWLONG_CHOICES,
widget=forms.Select(attrs={'class':'required validate-selection','title':'Select length of cover required'}))
who_for = forms.ChoiceField(choices=WHOFOR_CHOICES,
widget=forms.Select(attrs={'class':'required validate-selection','title':'Select whether you require cover for a partner also'}))
...
class Meta:
model = Compare
- models.py:
class Compare(models.Model):
how_much = models.CharField(max_length=28,choices=HOWMUCH_CHOICES#,default='100000'
)
how_long = models.CharField(max_length=28,choices=HOWLONG_CHOICES)
who_for = models.CharField(max_length=28,choices=WHOFOR_CHOICES)
...
partner_date_of_birth = models.DateField(blank=True)
def __unicode__(self):
return self.name
- views.py:
def qc_comparison(request):
return render_to_response('compare/compare.html', locals(), context_instance=RequestContext(request))
- urls.py:
(r'^compare/thanks/$', 'django.views.generic.simple.direct_to_template', {'template': 'compare/thanks.html'}),
我的目标是将表单中的 4 到 5 个字段的值传递到结果页(thanks.html),以便我可以根据这些值构建一个 iFrame。然而,在研究了 Django 文档后,我仍然不清楚如何正确地将这些变量传递给结果页。
解决方案
为了解决这个问题,您可以使用 Django 的 RequestContext 类将表单数据传递给结果页。以下是详细的步骤:
- 在
views.py文件中,修改qc_comparison视图函数,如下:
from django.shortcuts import render_to_response
from django.template import RequestContext
def qc_comparison(request):
if request.method == 'POST':
form = ComparisonForm(request.POST)
if form.is_valid():
# 将表单数据保存到数据库
compare = Compare(
how_much=form.cleaned_data['how_much'],
how_long=form.cleaned_data['how_long'],
who_for=form.cleaned_data['who_for'],
...
)
compare.save()
# 将表单数据传递给结果页
return render_to_response('compare/thanks.html',
{'form_data': form.cleaned_data},
context_instance=RequestContext(request))
else:
form = ComparisonForm()
return render_to_response('compare/compare.html', {'form': form}, context_instance=RequestContext(request))
- 在
thanks.html文件中,您可以使用form_data字典来访问表单数据。例如,以下代码将显示表单中选择的how_much字段的值:
{{ form_data.how_much }}
- 使用
form_data字典中的数据构建 iFrame 的查询字符串。
按照以上步骤,您就可以将表单数据成功传递到结果页,并根据这些数据构建 iFrame。