【问题标题】:How to manually render a part of a django form如何手动渲染 django 表单的一部分
【发布时间】:2014-09-23 13:40:08
【问题描述】:

我实际上是在 template.html 中渲染了一个带有以下代码的 django 表单:

<form action="{% url "demande_create_form" %}" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Envoyer" />
</form>

其中一个字段是用一个复选框小部件呈现的,有很多值,所以我想把它们放在一个表格中。

有没有办法在不手动渲染整个表单的情况下做到这一点?

【问题讨论】:

标签: django forms templates


【解决方案1】:

您可以简单地使用以下几行(及其相应的错误):

<form action="{% url "demande_create_form" %}" method="post">{% csrf_token %}
  <li>
    {{ form.nameOfField1 }}
    {{ form.nameOfField1.errors }}
  </li>
  <li>
    {{ form.nameOfField2 }}
    {{ form.nameOfField2.errors }}
  </li>
  <input type="submit" value="Envoyer" />
</form>

这是 1.6 的文档:https://docs.djangoproject.com/en/1.6/topics/forms/#customizing-the-form-template

另外,因为你有很多字段,你可以使用一些这样的代码:

<form action="{% url "demande_create_form" %}" method="post">{% csrf_token %}
  {% for field in form %}
    <li>
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </li>
  {% endfor %}
  <input type="submit" value="Envoyer" />
</form>

当然,你可以使用&lt;li&gt;以外的任何东西。

【讨论】:

  • 我的表单中有近 30 个字段。如果我使用这个解决方案,我必须把它们全部写出来,从 {{ form.nameOfField1 }} 到 {{ form.nameOfField30}},不是吗?我的问题是关于仅手动渲染复选框的字段,这是单独的。
  • 您可以根据需要选择渲染 firldd 1,2.26 和 30。您不必全部渲染。
  • 如果你想全部渲染它们,是的,你必须把它们全部写出来,或者像以前一样使用方法:{{ form.as_p }}。请注意,如果您需要应用特殊样式,您可以为表单的每个属性(在 forms.py 中)设置一个类。
  • 我的错,刚刚看到这个,你实际上可以遍历字段:docs.djangoproject.com/en/1.6/topics/forms/…。添加到答案。
  • @RaphaelLaurent :编辑,刚刚看到您的第二条评论。您能告诉我更多关于将类设置为属性的信息吗?
猜你喜欢
  • 2017-06-02
  • 2011-08-09
  • 2019-04-01
  • 2019-07-08
  • 2017-05-12
  • 2020-05-08
  • 2020-08-16
  • 1970-01-01
  • 2013-02-25
相关资源
最近更新 更多