我有一个相对复杂的表单,它在我的网站上的多个地方使用(实际上,它是许多其他表单类继承的表单)。在模板中,这种形式的继承部分总是采用相同的格式——但这种格式涉及到某种程度;每个字段都在模板中手动呈现和定位。
这意味着显示此表单的每个模板都有许多相同的 HTML 标记,可以适当地呈现表单。
我想创建一个可以调用的自定义输出,类似于as_table()
方法。我知道,一个可以覆盖normal_row
,error_row
等属性,但这种形式的格式超越了(例如,三窗体的五个领域的应打印并排侧,附合称)。我见过的所有教程/已回答的问题要么是指覆盖上述属性,要么是提供有关如何手动呈现表单的说明。
最初,我是这样想的:
Class StrangeForm(form.Forms):
....
def as_table_custom():
html_string = "\
<tr><td>Title 1:</td><td>self.fields['field1']</td><tr>\
<tr><td>Title 2:</td><td>self.fields['field2']</td><tr>\
<tr><td>Titles 3, 4, 5:</td><td>self.fields['field3']\
</td><td>self.fields['field4']</td><td>self.fields['field5']</td></tr>\
"
return html_string
但是,在阅读了Django 的 forms.py 文件的_html_output()
和as_table()
方法之后,它看起来并不那么容易。如果我从头开始写这个,必须以某种方式解释错误、帮助文本等。我想。
是否有一种简单的方法可以覆盖某些内容,以便可以像上面那样定义表单的 HTML 输出?或者我必须从头开始重新编写东西。如果是后者,我如何解释我需要解释的所有事情?
我不会采取这种方法。您最好在 HTML 模板中创建表单,该模板包含在您想要以这种方式显示表单的各种模板中。
因此,创建一个 my_strange_form.html 模板,您假设在上下文中传递了一个具有正确数量的字段的“表单”对象。在该模板中,只需使用{{ field.label_tag }}
和 之类的东西创建 HTML {{ field }}
。您可以使用 a 循环遍历字段,{% for field in form %}
并使用 来检查循环的计数器{{ forloop.counter }}
。我预见了很多{% if forloop.counter... %}
语句来生成组合行,它看起来很难看,但你只需要看一次:-)
然后在您的主模板中{% include 'my_strange_form.html' with form=form %}
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句