【问题标题】:django templates: How to know form field type and add any buttons based on field typedjango 模板:如何知道表单字段类型并根据字段类型添加任何按钮
【发布时间】:2013-12-23 19:58:40
【问题描述】:

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

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

现在我想知道字段的数据类型。如果字段类型是日期时间输入,那么我想在它旁边给一个按钮来获取 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 %}

帮帮我提前谢谢。

【问题讨论】:

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


【解决方案1】:

制作模板标签。取决于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 语句中使用的字段类名称。

【讨论】:

    【解决方案2】:

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

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

    关于自定义过滤器的文档:link

    但是,为什么不直接渲染字段而不循环它们呢?

    {{ form.birthdate }}
    

    那你就肯定知道什么是什么了。

    【讨论】:

    • 嗨,Alex 和 McAbra,我不知道在哪里写这个模板过滤器,在我的 forms.py 或我的 models.py 中,请详细解释一下。
    • 您可以在您的应用中为自定义标签和过滤器创建一个单独的文件。通过我的答案中的链接,您可以阅读有关如何注册标签和过滤器的信息。但是你真的需要循环吗?这一切看起来有点矫枉过正。
    猜你喜欢
    • 2019-04-15
    • 2018-03-13
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多