Django 表单输入内容在结果页的显示

82 阅读2分钟

我试图从一个大的 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 类将表单数据传递给结果页。以下是详细的步骤:

  1. 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))
  1. thanks.html 文件中,您可以使用 form_data 字典来访问表单数据。例如,以下代码将显示表单中选择的 how_much 字段的值:
{{ form_data.how_much }}
  1. 使用 form_data 字典中的数据构建 iFrame 的查询字符串。

按照以上步骤,您就可以将表单数据成功传递到结果页,并根据这些数据构建 iFrame。