django templates:如何知道表单字段类型并根据字段类型添加任何按钮

时间:2013-12-06 12:50:51

标签: django django-models django-forms django-templates

我正在用下面的代码动态显示我的django表单。

{% for field in form %}
    {% if field.field.required %}
        <span class="red">*</span>
    {% endif %}
    {{ field.label }}:
    {{ field }}
{% endfor %}

现在我想知道fields的数据类型。如果字段类型是Datetimeinput,那么我想在它旁边放一个按钮来获取JavaScript日历。

我想要如下所示,但我无法得到它

{% for field in form %}
    {% if field.field.required %}
        <span class="red">*</span>
    {% endif %}
    {% if field.field_type == 'Datetimeinput' %}
        {{ field.label }}:
        {{ field }}
        <label>From :</label><input type="text" name="from1" class="txtbox"><input type="button" value="Cal" onclick="displayCalendar(document.forms[0].from1,'yyyy-mm-dd',this)">
    {% else %}
        {{ field.label }}:
        {{ field }}
    {% endif %}
{% endfor %}

提前帮助我。

2 个答案:

答案 0 :(得分:4)

制作模板标签。取决于Get type of Django form widget from within template。我用了一两次这个解决方案。

from django import template
register = template.Library()

@register.filter('klass')
def klass(ob):
    return ob.__class__.__name__

在模板中:

{{ field.field.widget|klass }}

将返回要在if语句中使用的字段类名称。

答案 1 :(得分:1)

您可以为此编写自定义模板过滤器。

@register.filter
def fieldtype(obj):
    return obj.__class__.__name__

自定义过滤器的文档:link

但是,为什么不在没有循环的情况下渲染字段?

{{ form.birthdate }}

然后你会确切知道是什么。