django模板中的只读表单

时间:2015-06-04 18:23:55

标签: django

如何在模板上进行只读输入,而不是在模型或视图中?

例如在

{% for form in formset %}
            {{ form.id }}
            <tr>
                <th>{{ form.project_name }}</th>

如果可能(我在model.py中有默认值),我需要通过html将{{ form.project_name }}只读(仍为格式)

编辑。我需要它只是浏览器只读,而不是只读表单。

4 个答案:

答案 0 :(得分:10)

如果您想让所有字段仅在模板级别读取,请使用HTML <fieldset>已禁用属性:

    <form action="{% url "app.views.fonction" %}" method="post">{% csrf_token %}
        <h2>{% trans "Any title" %}</h2>
        <fieldset disabled="disabled">
            {{ form.as_ul }}
        </fieldset>
    <input type="submit" class="any" value="any" />
    </form>

答案 1 :(得分:2)

如果您想在HTML中制作input字段readonly,您必须自己编写所有必需的HTML。

HTML

<input type="text" value="{{ object.field_1 }}" readonly />
<input type="text" value="{{ object.field_2 }}" readonly />

<!-- And so on -->

答案 2 :(得分:1)

最干净的方法是创建一个具有readonlyfields http://google.com选项的新基本表单类,并为您完成剩下的工作。

你不应该在模板中拥有任何逻辑,而是在视图中验证数据,然后让django渲染只读输入为http://google.com

我在制作中使用它非常成功。

meta

这是我在production中使用的代码:

span widget

答案 3 :(得分:0)

有一个非常好的答案here

您可以通过小部件的属性属性将必要的html添加到表单字段:

myform.fields['thefield'].widget.attrs['readonly'] = True

这样你仍然可以在你的模板中写下

{{myform.thefield.label_tag}}
{{myform.thefield}}

并且Django会将readonly="True"放入<input ...>