【问题标题】:styling form render in Django在 Django 中样式化表单渲染
【发布时间】:2018-09-03 15:59:10
【问题描述】:

我正在使用Django 2.x

我使用Formset 可以一次添加多条记录。

表单在template文件中呈现为

{{ chapter_questions.as_table }}

下面的模板看起来很丑。

我正在使用Bootstrap 模板来设计我的模板,使其看起来像

为了像第二张图片一样渲染模板,我手动将字段编写为

<div class="form-group">
    <div class="col-sm-12 col-xs-12">
        <label for="question">Word</label>
            <input name="chapterquestion_set-0-word" type="text" class="form-control border-color-2" placeholder="Word" id="question">

            {% if chapterquestion_set.word.errors %}
            <div class="row">
                <div class="col-sm-12">
                    <div class="alert alert-danger">
                        <ul>
                            {% for error in chapter_questions.word.errors %}
                            <li>{{ error }}</li>
                            {% endfor %}
                        </ul>
                    </div>
                </div>
            </div>
        {% endif %}

    </div>

    <div class="col-sm-12 col-xs-12">
        <label for="definition">Definition</label>
        <input name="chapterquestion_set-0-definition" type="text" class="form-control border-color-3" placeholder="Definition" id="definition">

        {% if chapter_questions.definition.errors %}
        <div class="row">
            <div class="col-sm-12">
                <div class="alert alert-danger">
                    <ul>
                        {% for error in chapter_questions.definition.errors %}
                        <li>{{ error }}</li>
                        {% endfor %}
                    </ul>
                </div>
            </div>
        </div>
        {% endif %}
    </div>

    <div class="col-sm-12 col-xs-12">
        <label for="audio"></label>
        <input name="chapterquestion_set-0-audio" type="text" class="form-control border-color-4" placeholder="Audio" id="audio">

        {% if chapter_questions.audio.errors %}
        <div class="row">
            <div class="col-sm-12">
                <div class="alert alert-danger">
                    <ul>
                        {% for error in chapter_questions.audio.errors %}
                        <li>{{ error }}</li>
                        {% endfor %}
                    </ul>
                </div>
            </div>
        </div>
        {% endif %}
    </div>
</div>

这样我必须为多个对象多次编写代码。此外,为了添加新的对象字段,我需要使用 JavaScript 通过更新 1 来替换索引号(在本例中为 0)来复制整个代码。

如何设置表单小部件的样式,以便我可以利用 Django 自动字段插入和错误显示,并且只需要 {{ chapter_questions.as_bootstrap_div }} 来呈现引导表单。

【问题讨论】:

  • 您是否尝试在
    标签中添加 {{ chapter_questions.as_table }}?
  • 但我不想使用表格来呈现表格。我想使用 Bootstrap 的 div col 来渲染表单。
  • 如何创建全局文件来呈现文本字段和其他字段,以便呈现自定义样式。就像使用 as_table 标签一样
  • 在定义Form/ModelForm时可以在表单域中添加html类
  • 但是,在查看了您必须做的自定义级别之后,我建议为每种字段类型创建模板并使用它

标签: django django-templates


【解决方案1】:

模板/字段/text-field.html

<div class="col-sm-12 col-xs-12">
    {{field.label_tag}}
    <input name="{{field.name}}" type="text" class="form-control border-color-2" placeholder="{{field.label}}" id="{{field.name}}">

    {% if field.errors %}
    <div class="row">
        <div class="col-sm-12">
            <div class="alert alert-danger">
                <ul>
                    {% for error in field.errors %}
                    <li>{{ error }}</li>
                    {% endfor %}
                </ul>
            </div>
        </div>
    </div>
    {% endif %}
</div>

在您的表单上

{% with chapterquestion_set.word as field %}
    {% include 'fields/text-field.html' %}
{% endwith %}

【讨论】:

  • 难道没有办法像formset.as_custom 一样使用它,就像formset.as_table 一样吗?
  • 并非如此。如果您不想这样做,请尝试 @Serafeim 建议的酥脆形式
猜你喜欢
  • 2015-12-30
  • 2018-11-13
  • 2016-12-02
  • 1970-01-01
  • 2010-10-12
  • 2013-10-10
  • 2018-12-22
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多