Django渲染单个表单字段不显示

时间:2016-03-26 11:13:39

标签: django django-forms django-templates

我正在尝试逐个显示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>

依旧......

请解释为什么会这样。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果您知道该字段的名称,则可以单独呈现它:

<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 %}

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