【问题标题】:Adding a custom Jinja2 filter in GAE 1.6.0在 GAE 1.6.0 中添加自定义 Jinja2 过滤器
【发布时间】:2011-12-23 19:20:25
【问题描述】:

我想添加过滤器来格式化我的时间,最好的过滤器是像 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

【问题讨论】:

  • 在这种情况下jinja_environment 是什么?你确定它是你用来渲染的那个吗?您可以链接到建议的文档吗?

标签: python google-app-engine jinja2


【解决方案1】:

按照您的示例和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)

【讨论】:

    【解决方案2】:

    因为我使用的是推荐here的缓存jinja2环境,

    Kee 的回答对我无效,但 this one 有效。

    具体来说,调用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2021-10-24
      • 2021-02-24
      相关资源
      最近更新 更多