【问题标题】:Display Django form inputs on thanks page在感谢页面上显示 Django 表单输入
【发布时间】:2009-08-18 10:02:02
【问题描述】:

我正在尝试从一个大型 django 表单中提取 4-5 个字段并将它们显示在感谢页面上。

我想以良好的控制程度显示值,因为我将根据表单输入构建一个带有参数查询字符串的 iFrame。

目前我有:

forms.py ----

-*- encoding: utf-8 -*-
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'),
)

...等等。

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'}),

我试图从文档中找出最好的方法,但不清楚如何将变量正确传递到感谢页面。

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    模板可用的值由视图提供。

    render_to_response 函数提供了传递给模板的值的字典。见this。

    无缘无故,您提供了locals()。不知道为什么。

    您想提供像 request.POST 这样的字典,而不是 locals()。


    您的locals() 将拥有request。这意味着您的模板可以使用request.POST 访问表单。

    【讨论】:

    • 感谢您的响应 - 我正在使用 locals() 因为我还有一个自定义上下文处理器在使用(它识别子域并使它们的字符串可用于 Django)。将尝试建议的更改,看看效果如何。
    • 这是一种享受。我也通过上下文处理器传递表单数据。以下是参考代码: def compare_form(request): from siteapp.compare.forms import ComparisonForm if request.method == 'POST': form = ComparisonForm(request.POST) if form.is_valid(): cd = form.cleaned_data return {'cd': cd} else: form = ComparisonForm() return {'form': form} 然后调用模板中的上下文。
    【解决方案2】:

    我不确定我是否理解你想要做什么。

    但如果您想以纯文本形式呈现表单值,您可以尝试django-renderformplain。只需像在任何其他表单处理视图中一样使用 POST(或 GET)数据初始化表单,然后在上下文中传递您的 form 实例。

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 2017-12-15
      • 1970-01-01
      • 2013-08-11
      • 2019-12-05
      • 1970-01-01
      • 2021-03-09
      • 2013-09-10
      • 1970-01-01
      相关资源
      最近更新 更多