Django Wagtail未穿过自定义字段面板
我用以下方式覆盖wagtailDjango Wagtail未穿过自定义字段面板,django,forms,wagtail,Django,Forms,Wagtail,我用以下方式覆盖wagtailAbstractFormField面板属性: ... before_input = RichTextField(verbose_name=_('before input'), blank=True) after_input = RichTextField(verbose_name=_('after input'), blank=True) panels = [ FieldPanel('label'), FieldPanel('before_inpu
AbstractFormField
面板
属性:
...
before_input = RichTextField(verbose_name=_('before input'), blank=True)
after_input = RichTextField(verbose_name=_('after input'), blank=True)
panels = [
FieldPanel('label'),
FieldPanel('before_input'),
FieldPanel('after_input'),
FieldPanel('required'),
FieldPanel('field_type', classname="formbuilder-type"),
FieldPanel('choices', classname="formbuilder-choices"),
FieldPanel('default_value', classname="formbuilder-default"),
]
<form action="{% pageurl page %}" method="POST" class="lm-ls1" id="feedback-form">
{% csrf_token %}
{{ form.question1.help_text }} <!-- Simpler non interable way -->
{{ form.question1.before_input }}
<p>---------------</p>
{% for row in form.fields.values %}
{{row.choices}}
<p>---------------</p>
{{row.help_text}}
<p>---------------</p>
{{row.before_input}}
{% endfor %}
</form>
其他面板是从盒子里出来的
这是完美的工作在管理方面,也保存为富文本到我的数据库
我正在通过以下方式将此信息导入模板中的表单:
...
before_input = RichTextField(verbose_name=_('before input'), blank=True)
after_input = RichTextField(verbose_name=_('after input'), blank=True)
panels = [
FieldPanel('label'),
FieldPanel('before_input'),
FieldPanel('after_input'),
FieldPanel('required'),
FieldPanel('field_type', classname="formbuilder-type"),
FieldPanel('choices', classname="formbuilder-choices"),
FieldPanel('default_value', classname="formbuilder-default"),
]
<form action="{% pageurl page %}" method="POST" class="lm-ls1" id="feedback-form">
{% csrf_token %}
{{ form.question1.help_text }} <!-- Simpler non interable way -->
{{ form.question1.before_input }}
<p>---------------</p>
{% for row in form.fields.values %}
{{row.choices}}
<p>---------------</p>
{{row.help_text}}
<p>---------------</p>
{{row.before_input}}
{% endfor %}
</form>
在输入
\u formfield
wagtail表中存储的字段面板数据之前,我如何访问。有点晚了,但希望这仍能帮助您或其他人
Wagtail表单是如何工作的
为AbstractFormPage模型的视图上下文提供的Wagtail表单是一个完全实例化的Django表单。这意味着您只能在表单
中找到可以提供给Django表单的值
这包括字段,这些字段是Django的字段
(例如CharField
)的实例,没有简单的方法向这些字段添加其他属性
您可以看到表单对象是如何在Wagtail类定义中构建的
1-制作自定义模板标记
在FormField(Wagtail的FormField)上获取附加属性的一种简单方法是使用模板标记
在应用程序中的文件夹templatetags
中创建一个新文件,并构建一个新文件,该文件将采用表单页面、字段(将是Django字段实例)和您想要获取的属性名称字符串
# myapp/templatetags/form_tags.py
from django import template
from django.utils.html import mark_safe
register = template.Library()
@register.simple_tag(name='form_field_attribute')
def form_field_attribute(form_page, field, attribute_name, default=None):
"""Return attribute on FormField where field matches 'field' provided."""
# field is a django Field instance
field_name = field.name
results = [
# if html is stored, need to use mark_safe - be careful though.
mark_safe(getattr(form_field, attribute_name, default))
# get_form_fields() is a built in function on AbstractFormPage
for form_field in form_page.get_form_fields()
# clean_name is property on AbstractFormField used for Django Field name
if form_field.clean_name == field_name]
if results:
return results[0]
return default
2-修改您的form_page.html模板
在模板中,循环浏览表单(这是Django表单实例),并使用模板帮助器获取所需的额外属性。下面的示例中,传入page
或self
的工作原理与它们都是FormPage
的实例相同
<form action="{% pageurl page %}" method="POST" role="form">
{% csrf_token %}
{% for field in form %}
<div>{% form_field_attribute page field 'before_input' %}</div>
{{ field }}
<div>{% form_field_attribute page field 'after_input' %}</div>
{% endfor %}
<input type="submit">
</form>
{%csrf_令牌%}
{%形式的字段为%}
{%form\u field\u attribute page field'在输入“%”之前
{{field}}
{%form_field_attribute page field'在输入“%”之后
{%endfor%}