Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Wagtail未穿过自定义字段面板_Django_Forms_Wagtail - Fatal编程技术网

Django Wagtail未穿过自定义字段面板

Django 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

我用以下方式覆盖wagtail
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%}