【问题标题】:Django render individual form field not showingDjango渲染单个表单字段不显示
【发布时间】:2016-07-14 01:47:02
【问题描述】:

我正在尝试一一显示 Django 表单的各个字段,因为我想更改某些属性。

这是我的 forms.py。为了清楚起见,我已将其缩减为一个字段。

from django import forms

class NameForm(forms.Form):
    name = forms.CharField(max_length=100)

如果我完全呈现表单,它会完美运行。我的 HTML 代码 -

<form style="text-align:center; padding-bottom: 2%" action="/contact/" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form }}
</form>

上面代码的页面源是这样的——

<p><label for="id_name">Name:</label> <input id="id_name" maxlength="100" name="name" type="text" /></p>

当我尝试使用 {{ form.name }} 而不是 {{form}} 呈现单个字段时,问题就出现了。此页面源显示为空。没有形成 HTML。

我也试过了——

{% for field in form %}
    <div class="fieldWrapper">
        {{ field }}
    </div>
{% endfor %}

为此渲染的 HTML 就像 -

                <div class="fieldWrapper">
                    &lt;
                </div>

                <div class="fieldWrapper">
                    p
                </div>

                <div class="fieldWrapper">
                    &gt;
                </div>

                <div class="fieldWrapper">
                    &lt;
                </div>

                <div class="fieldWrapper">
                    l
                </div>

                <div class="fieldWrapper">
                    a
                </div>

                <div class="fieldWrapper">
                    b
                </div>

                <div class="fieldWrapper">
                    e
                </div>

                <div class="fieldWrapper">
                    l
                </div>

                <div class="fieldWrapper">

                </div>

                <div class="fieldWrapper">
                    f
                </div>

                <div class="fieldWrapper">
                    o
                </div>

                <div class="fieldWrapper">
                    r
                </div>

                <div class="fieldWrapper">

我还没有发布完整的 HTML 源代码,但似乎循环正在打印从表单呈现的 HTML 代码的每个字符,就好像我们将打印的前几个字符组合起来形成 HTML 一样 -

<p><label for>

等等……

请解释为什么会这样。

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

    如果你知道字段的名称,你可以像这样单独渲染它:

    <div class="fieldWrapper">
        {{ form.myfield.errors }}
        <label for="{{ form.myfield.id_for_label }}">Label for myfield : </label> 
        {{ form.myfield }}
    </div>
    

    (如果您在 Form 类中定义了标签,也可以使用 {{ form.myfield.label_tag }} 作为标签)

    否则,如果你想要一个 for 你可以这样做:

    {% for field in form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
        </div>
    {% endfor %}
    

    它对我很有效。如果您仍然有问题,我认为它必须在您的其余代码中。如果是,请显示输入模板:)

    【讨论】:

    • 我已经尝试过{{ form.myfield }} 和其他替代方案,但它们不会呈现任何 html
    【解决方案2】:

    请检查您从视图中返回了什么。 如果您的视图返回 form.as_p,则可能会发生这种情况。 这可以通过仅返回表单来纠正。 它应该工作!如果它仍然不起作用,请发布视图和整个模板。

    【讨论】:

    • 是的,你是对的。我的观点正在返回form.as_p。我真傻。非常感谢。
    猜你喜欢
    • 2015-08-19
    • 2021-06-07
    • 2021-11-10
    • 2015-08-20
    • 2017-05-12
    • 2018-07-07
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多