如何在Django中自定义表单的呈现?

时间:2014-09-14 01:28:02

标签: python django django-forms

由于这个原因,我现在一直避免在Django中使用表格,我觉得这可能是不好的做法。在Django中渲染表单时,一切都是自动化的。这会阻止您有条件地呈现或隐藏表单的某些部分,将不同的css类附加到该表单等。

以尽可能动态的方式使用Django表单的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

我和吉姆在同一条船上,我正在看https://docs.djangoproject.com/en/dev/ref/forms/widgets/。这似乎是字段定制的一个很好的起点。

对于有条件地显示/隐藏元素,如果您希望在表单加载(即预定的表单布局)上完成此操作,您可以按照此SO答案解释表单的更改 init Conditionally show and hide a form field and set the field value

或者,如果您的意思是如何在表单完成时根据其他选择进行上下文操作,我到目前为止找到的唯一方法是使用表单呈现的模板加载一些自定义jQuery上。如果有办法在形式上做到这一点,我也想知道:)

答案 1 :(得分:1)

首先,绝对不要避免形式。实际上,总是在django中使用表单。它们使用简单,没有理由不这样做。

表单具有足够的灵活性,可以根据需要为您提供尽可能多的控制。

通常你会想做这样的事情:

<form action="/myurl/" method="post">
    {% csrf_token %}
    {% for fld in form %}
        {{ fld.label }} {{ fld }} {{ fld.help_text }} {{ fld.error }}
    {% endfor %}
    <input type="submit" value="Submit" />
</form>

您可能还想在div或表中包装字段。您还可以测试fld.name以根据字段名称执行自定义操作。

答案 2 :(得分:0)

基于Rainy的内容以及thisthis的答案,我的回答是

sudo pip install django-widget-tweaks

要在项目中启用widget_tweaks,您需要将它添加到项目settings.py文件中的INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'widget_tweaks',
    ...
]

我将这个包含在我有要呈现的表单的所有模板文件的开头。

{% load widget_tweaks %}

并按如下方式呈现我的表格:

<form method="post" action="">
  {% csrf_token %}
  {% for fld in form %}
    <div class="form-group">
      {% for error in fld.errors %}<p class="help-block text-danger">{{ error }}</p>{% endfor %}
      <label>{{ fld.label }}</label>
      {% render_field fld class+="form-control" %}
      <p class="help-block">{{ fld.help_text|safe }}</p>
    </div>
  {% endfor %}
  <button type="submit" class="btn btn-success">{% trans 'Submit' %}</button>
</form>