Django生成表单标签,而不是对其进行硬编码

时间:2018-07-13 09:48:05

标签: python django

我在将标记硬编码到Django中的模板时遇到问题。我遇到问题的原因是我需要基于正在使用的框架动态生成表单。

该框架(用Python编写)具有一个Web界面(因此是Django),该框架需要框架中每个模块的表单,具体取决于需要提交给该模块的数据。

因此,我试图从模块中获取表单信息(哪些字段,字段的类型,标签等),我目前正在尝试这样做:

#framework/module.py
    def form():
        forms = '"upload": {"filename": "file","directory": "text"}'
    return forms

之所以如此构造它,是因为我试图将这些信息从Django传递到forms.py,以便可以将其转换为Django需要为模板创建输出。

>

现在,我已经尝试了几种方法将其添加到模板中。唯一的问题是,我必须创建硬编码到模板中的表单标签。我试图弄清楚如何获取也基于模块提供的信息动态生成的表单标签。因为在同一页面上可能存在需要多个表单的模块。

简而言之,我正在尝试这样做:

{% for f in forms %}
    {{f}}
{% endfor %}

代替此:

<form name="upload" action="foo" method="POST">
    {{form}}
</form>

在Django中有可能吗?

1 个答案:

答案 0 :(得分:0)

您可以在django here is how中手动呈现表单字段。

{% for field in form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
        {% if field.help_text %}
        <p class="help">{{ field.help_text|safe }}</p>
        {% endif %}
    </div>
{% endfor %}

编辑:我没有正确回答问题

您可以在字典中使用表单标记属性,并在这样的结构中遍历表单:

Python:

forms = {
    form_object: {"name": "upload", "action": "foo", "method": "POST"}
}

模板:

{% for form, tag_attributes in forms.items %}
    <form name="{{tag_attributes.name}}" action="{{tag_attributes.action}}" action="{{tag_attributes.method}}">
        Do stuff with your {{form}}
    </form>
{% endfor %}