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

Posted

技术标签:

【中文标题】django 模板:如何知道表单字段类型并根据字段类型添加任何按钮【英文标题】:django templates: How to know form field type and add any buttons based on field type 【发布时间】: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 %

帮帮我提前谢谢。

【问题讨论】:

Get type of Django form widget from within template的可能重复 【参考方案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 中,请详细解释一下。 您可以在您的应用中为自定义标签和过滤器创建一个单独的文件。通过我的答案中的链接,您可以阅读有关如何注册标签和过滤器的信息。但是你真的需要循环吗?这一切看起来有点矫枉过正。

以上是关于django 模板:如何知道表单字段类型并根据字段类型添加任何按钮的主要内容,如果未能解决你的问题,请参考以下文章

基于选择的 Django 模板/ChoiceField 显示字段

如何检查 django 表单中的字段类型?

根据值在 Admin 中自定义 Django 表单字段

如何将表单控件添加到 Django 表单?

访问模板化 Django 中的表单字段属性

如何在渲染django模板时动态设置表单选择字段的初始值