Python 在Django表单中插入标题
我希望我的表单输出如下内容:Python 在Django表单中插入标题,python,django,forms,Python,Django,Forms,我希望我的表单输出如下内容: Name: ___________ Company: ___________ Interested in ------------- Foo: [ ] Bar: [ ] Baz: [ ] from django.forms import Form from formfieldset.forms import FieldsetMixin class MyForm(Form, FieldsetMixin): fieldsets = ( (
Name: ___________
Company: ___________
Interested in
-------------
Foo: [ ]
Bar: [ ]
Baz: [ ]
from django.forms import Form
from formfieldset.forms import FieldsetMixin
class MyForm(Form, FieldsetMixin):
fieldsets = (
(u'', {'fields': ['name', 'company']}),
(u'Interested in', {'fields': ['foo', 'bar', 'baz']}),
)
# rest of the form
也就是说,我希望把“感兴趣”的标题插入到表单输出的中间。
一种方法是写出每个字段的模板代码,并根据需要插入标题。然而,我不想这样做。我怀疑表单集与我想做的事情有关 有没有什么方法可以满足我的需求,或者我只需要接受它,接受我需要为它直接编写模板的事实?你可以获得类似管理员的字段集。您可以这样创建表单:Name: ___________
Company: ___________
Interested in
-------------
Foo: [ ]
Bar: [ ]
Baz: [ ]
from django.forms import Form
from formfieldset.forms import FieldsetMixin
class MyForm(Form, FieldsetMixin):
fieldsets = (
(u'', {'fields': ['name', 'company']}),
(u'Interested in', {'fields': ['foo', 'bar', 'baz']}),
)
# rest of the form
表单字段保留定义表单类或模型的顺序(如果它是form for model)。在模板中,您可以迭代所有指定如何渲染的字段,您可以使用ifequal标记检查要查找的字段,并指定不同的渲染 见:
Django表单集不是一种好方法:如果需要同时编辑多个对象,可以使用它们。HTML字段集更像是正确的方式。我想您可以将名称和公司字段分组到一个字段集中,然后将兴趣字段分组到另一个字段集中 在DjangoSnippets上,您可以找到一个 使用此代码段,您可以将视图中的分组定义为
fieldsets = (
('', {'fields': ('name','company')}),
('Interested in', {'fields': ('foo','bar','baz')})
)
将其与表单一起传递到模板,并使用
{% draw_form form fieldsets %}
我不希望在视图中定义分组,因为它主要是表示问题,应该属于视图,但见鬼,这似乎可以完成任务
虽然muhuk的解决方案看起来比这更优雅…这有点像黑客,但您可以定义一个只呈现其值的
HeaderWidget
:
from django.forms.util import flatatt
from django.utils.html import format_html
class HeaderWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None):
attrs.update(self.attrs)
return format_html('<div{0}>{1}</div>', flatatt(attrs), value)
一个小缺点是,您会在表单中看到标题“value”。我认为它属于表单,因为foo、bar和baz字段在概念上是相关的,我不想插入标题以使其看起来更好。无论如何,我会在喝过早餐咖啡后看看这些解决方案。:)适用于向表单添加虚拟标题。