我试图将附加信息传递给要在模板中显示的Django表单的字段。我试图重写构造函数和其他属性添加到现场是这样的:将附加信息附加到表单字段
self.fields['field_name'].foo = 'bar'
,但在模板这样的:
{{ form.field_name.foo }}
没有打印任何东西。有谁知道如何在不重写/继承表单字段类的情况下向字段添加额外信息?
我试图将附加信息传递给要在模板中显示的Django表单的字段。我试图重写构造函数和其他属性添加到现场是这样的:将附加信息附加到表单字段
self.fields['field_name'].foo = 'bar'
,但在模板这样的:
{{ form.field_name.foo }}
没有打印任何东西。有谁知道如何在不重写/继承表单字段类的情况下向字段添加额外信息?
根据django.forms.forms
,一个Form
的__getitem__()
方法创建一种叫做BoundField
出了场返回之前,从而剥夺它的你做任何改变。如果你真的想插入更多的功能是,重写这个方法返回之前做的东西到绑定字段:
class MyForm(forms.Form):
def __getitem__(self, name):
boundfield = super(forms.Form,self).__getitem__(name)
boundfield.foo = "bar"
return boundfield
然后,"bar"
将出现在表格的所有字段。您也可以创建一个函数并调用它,使其不仅仅是一个硬编码的字符串。
尽管添加更多字段或向表单本身添加属性更为标准,但如果您有一个全新的每个字段都需要包含的信息类别,则可能会为您执行此操作。
另一种方式来获得同样的事情,是编辑的字段的属性,然后通过BoundField
的"field"
属性访问:
class MyForm(forms.Form):
def __init__(self, *args, **kwargs)
super(forms.Form, self).__init__(*args, **kwargs)
self.fields['field_name'].foo = "bar"
然后,访问foo
在模板:
{{ form.field_name.field.foo }}
感谢在t他的解释。我尝试了这两种方法中的后者,并且它像一个魅力一样工作 - 再次感谢。 – Max 2010-07-11 07:50:50
相关:http://stackoverflow.com/questions/2270550/warnings-or-even-info-messages-instead-of-only-errors-in-django – guettli 2014-08-13 08:42:44