如何在Jinja2模板中重写/自定义(原生)对象的默认格式?
我想改变Flask Admin中日期的默认显示方式,想给它设置一个特定的时区,并以更容易理解的格式展示出来。
有很多方法可以做到这一点,比如使用过滤器、__html__
、__str__
、Babel等等。虽然这些方法可能有效,但我想知道是否有一种更通用的方法来解决更普遍的问题。格式化日期这个具体问题只是一个例子。
在我的情况下,我无法控制日期对象——我不能去继承它或者修改它的__str__
或__html__
方法。我希望所有模板中的日期都能自动处理,而不想写自定义的管理模板,也不想在模板中使用显式的过滤器。
我理想的解决方案是以某种方式为Jinja指定一个默认过滤器,这样所有数据在展示之前都能通过这个过滤器。我可以自己写这个过滤器,但我不知道怎么让Jinja使用它。
我想到一个办法是以某种方式使用自动转义(可以参考这个问题),但我找不到不使用复杂的修改方法来覆盖Jinja的自动转义功能。
有没有什么想法?
2 个回答
1
如果你想在Flask-Admin相关的代码中实现这个功能,可以使用 column_type_formatters
。
2
你不需要去修改任何东西。
你只需要为你的模型视图创建一个自定义的基础类,并在里面添加自定义的格式化器。下面是一个关于 date
类的例子:
from datetime import date
from flask_admin.model import typefmt
def date_format(view, value):
return value.strftime('%d.%m.%Y')
MY_DEFAULT_FORMATTERS = dict(typefmt.BASE_FORMATTERS)
MY_DEFAULT_FORMATTERS.update({
date: date_format,
})
class MyModelView(BaseModelView):
column_type_formatters = MY_DEFAULT_FORMATTERS