首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从jinja2调用python函数

从jinja2调用python函数
EN

Stack Overflow用户
提问于 2011-05-18 03:29:49
回答 10查看 161.7K关注 0票数 178

我正在使用jinja2,并且我想调用一个python函数作为帮助器,使用类似的语法,就像我在调用宏一样。jinja2似乎有意阻止我进行函数调用,并坚持让我通过将函数作为宏复制到模板中来重复自己。

有什么简单的方法可以做到这一点吗?而且,有没有办法导入一整套python函数并从jinja2访问它们,而不需要经历一大堆繁琐的工作(例如编写扩展)?

EN

回答 10

Stack Overflow用户

发布于 2011-08-29 12:26:11

对于那些使用Flask的人,把这个放到你的__init__.py

代码语言:javascript
复制
def clever_function():
    return u'HELLO'

app.jinja_env.globals.update(clever_function=clever_function)

并在您的模板中使用{{ clever_function() }}调用它

票数 244
EN

Stack Overflow用户

发布于 2014-11-24 08:42:11

代码语言:javascript
复制
from jinja2 import Template

def custom_function(a):
    return a.replace('o', 'ay')

template = Template('Hey, my name is {{ custom_function(first_name) }} {{ func2(last_name) }}')
template.globals['custom_function'] = custom_function

您还可以根据Matroskin's answer在字段中指定函数

代码语言:javascript
复制
fields = {'first_name': 'Jo', 'last_name': 'Ko', 'func2': custom_function}
print template.render(**fields)

将输出:

代码语言:javascript
复制
Hey, my name is Jay Kay

适用于Jinja2版本2.7.3

如果您想要一个装饰器来简化在template.globals上定义函数,请查看Bruno Bronosky's answer

票数 47
EN

Stack Overflow用户

发布于 2017-11-15 00:49:00

我喜欢@AJP's answer。我一字不差地使用它,直到我有了很多函数。然后我换成了Python function decorator

代码语言:javascript
复制
from jinja2 import Template

template = '''
Hi, my name is {{ custom_function1(first_name) }}
My name is {{ custom_function2(first_name) }}
My name is {{ custom_function3(first_name) }}
'''
jinga_html_template = Template(template)

def template_function(func):
    jinga_html_template.globals[func.__name__] = func
    return func

@template_function
def custom_function1(a):
    return a.replace('o', 'ay')

@template_function
def custom_function2(a):
    return a.replace('o', 'ill')

@template_function
def custom_function3(a):
    return 'Slim Shady'

fields = {'first_name': 'Jo'}
print(jinga_html_template.render(**fields))

幸好函数有一个__name__

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6036082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档