Ed.*_*Ed. 12 django django-templates
我有一个变量,我正在拉入一个有时是日期的表,有时候是一个字符串.如果变量是日期,我想更改格式:
<td>{{ action.extra_column|date:"M d" }}</td>
Run Code Online (Sandbox Code Playgroud)
但如果它是一个字符串,我只想按原样显示:
<td>{{ action.extra_column }}</td>
Run Code Online (Sandbox Code Playgroud)
如果我尝试格式化它并且它是一个字符串,我得不到该变量的输出.
如何确定类型以便我可以根据类型调整渲染.
sup*_*cuo 27
您还可以将一般模板过滤器实现为type()
内置的等效过滤器:
# app/templatetags/util.py
from django import template
register = template.Library()
@register.filter
def get_type(value):
return type(value)
# template.html
{% load util %}
{% if extra_column|get_type == 'str' %}
String
{% elif extra_column|get_type == 'datetime.date' %}
Date
{% else %}
Oh no!
{% endif %}
Run Code Online (Sandbox Code Playgroud)
不过,我认为Ignacio和Dirk是对的.难道你不能只有两个键(你说"数组",但我认为你的意思是"字典",因为项目有名称)被称为date
和detail
?
# views.py
...
actions = [{
'some_property': 'some_value'
'date': None,
'detail': 'details'
},
{
'some_property': 'some_value'
'date': datetime.date.today(),
'detail': None
}]
...
# template.html
{% for action in actions %}
<td>{% if action.date %}{{ action.date|date:"M d" }}{% endif %}{{ action.detail }}</td>
{% endfor %}
# output
<td>details</td>
<td>Aug 19</td>
Run Code Online (Sandbox Code Playgroud)
就像 Ignacio Vazquez-Abrams 在第一条评论中指出的那样,这并不是编写逻辑的好方法。我会确保你的变量具有某种类型。这可以通过添加到上下文的附加变量或保存数据和描述数据类型的对象来解决。
如果您想坚持自己的逻辑,一种可能的方法是编写自己的模板过滤器(我们称之为date_or_string
)。过滤器可以子类化内置date
过滤器,格式参数是可选的。如果传递了参数,它的工作方式就像普通date
过滤器一样,如果没有参数,它只会返回字符串。在更复杂的场景中,过滤器还可以进行一些类型检查。只是一个想法,我实际上不会将这种逻辑放入模板中。
归档时间: |
|
查看次数: |
20115 次 |
最近记录: |