在Django中有没有类似于通用视图的通用模板?

8 投票
3 回答
1639 浏览
提问于 2025-04-16 20:26

通用视图帮我省了很多代码,但我还是得为每个模型写模板。我的所有模板里都有相同的代码,比如:

<form action="/{{type}}/{{ action }}/" method="post" enctype="multipart/form-data" >
    {% csrf_token %}
    {% for field in form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }}: {{ field }}
        </div>
    {% endfor %}
    <p><input type="submit" value="Submit" /></p>
    </form>

也就是说,我基本上想要在添加或编辑时显示模型里的所有字段。

有没有什么办法可以自动生成通用模板呢?

3 个回答

0

在Django中,模板本身可以是通用的!!

你可以在同一个模板里为每个模型使用不同的表单,方法是使用 {{ form.attribute }}。

这里

1

看看这个 ModelForm助手应用。它可以根据任何模型自动生成一个表单,然后你可以在简单的表单模板中使用这个表单。

2

如果你有一些完全相同的模板代码,可以使用include标签来处理:

{% include "foo/bar.html" %}

而且被包含的代码可以通过变量进行修改:

{% include "name_snippet.html" with person="Jane" %}

即使每个模板的代码是不同的(我觉得你的例子是在说表单有不同的字段,不太确定),你仍然可以使用包含功能——只需创建两个代码块:

{% include "startform.html with some_action="post" %}
    {{ field.errors }}
    {{ field.label_tag }}: {{ field }}
    {{ field.field2_tag }}: {{ field2 }}
{% include "endform.html %}

还有模板继承的概念,你可以定义一个基本模板,然后让其他所有模板都从这个基本模板继承。继承是基于代码块的,你可以在子模板中用新代码覆盖父模板中的代码块。这种方式效果很好。

撰写回答