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 模板:如何知道表单字段类型并根据字段类型添加任何按钮的主要内容,如果未能解决你的问题,请参考以下文章