我想添加过滤器来格式化我的时间,最好的是像django的timesince
这样的过滤器会自动输出i18n所选语言的语言,但首先要做出快速解决方案我想要格式化我的约会。 suggested solution from the manual是:
def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
return value.strftime(format)
jinja_environment.filters['datetimeformat'] = datetimeformat
但是将此代码添加到我的文件中并不会使模板中的过滤器可用:
{{ ad.modified|datetimeformat }}
TemplateAssertionError: no filter named 'datetimeformat'
如果我将代码添加到Jinja2库的filters.py
,那么它可以工作。但我不需要手动添加到Jinja2文件,只需将Jinja2添加到我的app.yaml
并将我的过滤器放在我的代码而不是Jinja2代码中。我应该在哪里放置过滤器代码?
谢谢
更新
我的代码看起来像这样,似乎没有选择过滤器:
from django.utils import translation
from django.utils.translation import gettext, ngettext, ugettext, ungettext, get_language, activate
from jinja2 import Environment, FileSystemLoader
class DjangoTranslator(object):
def __init__(self):
self.gettext = gettext
self.ngettext = ngettext
self.ugettext = ugettext
self.ungettext = ungettext
class DjangoEnvironment(jinja2.Environment):
def get_translator(self, context):
return DjangoTranslator()
jinja_environment = DjangoEnvironment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), extensions=['jinja2.ext.i18n'])
jinja_environment.install_gettext_translations(translation)
def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
return value.strftime(format)
jinja_environment.filters['datetimeformat'] = datetimeformat
答案 0 :(得分:4)
按照您的示例和Jinja2 docs我添加了自定义过滤器,它可以正常工作。
确保使用正确的jinja2.Environment
实例来获取模板和渲染:
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(template_path))
env.filters['default_if_none'] = default_if_none # a function
tmpl = env.get_template(filename)
tmpl.render(**context)
答案 1 :(得分:2)
因为我使用的是缓存的jinja2环境{@ 3}},
Kee的回答对我不起作用,但是here做了。
具体而言,在调用webapp2.WSGIApplication
myconfig = {}
myconfig['webapp2_extras.jinja2'] = {'template_path': ['templates','blog_posts'],
'filters': {'blog_filter': blog_filter}}
app = webapp2.WSGIApplication(_routes,
debug=True,
config = myconfig)