如何将两个参数传递给app_template_filter
[docs]?如果我只使用一个参数,这很有效。但在这种情况下,我需要两个。
@mod.app_template_filter('posts_page')
def posts(post_id, company_id):
pass
{{ post.id, post.company.id | posts_page }}
错误:
TypeError: posts_page() takes exactly 2 arguments (1 given)
答案 0 :(得分:6)
来自Jijna docs,
变量可以通过过滤器修改。过滤器通过管道符号(|)与变量分隔,并且在括号中可以包含可选参数。可以链接多个过滤器。一个过滤器的输出应用于下一个过滤器。
过滤器旨在一次修改一个变量。您正在寻找context processor
:
变量不限于数值;上下文处理器也可以使函数可用于模板(因为Python允许传递函数)
例如,
@app.context_processor
def add():
def _add(int1, int2):
return int(int1) + int(int2)
return dict(add=_add)
可以在模板中用作
{{ add(a, b) }}
您可以将此作为posts_page
方法:
@app.context_processor
def posts_page():
def _posts_page(post_id, company_id):
# ...
return value
return dict(posts_page=_posts_page)
答案 1 :(得分:6)
虽然您可以使用上下文处理器,但它可能并不总是您想要的。
接受的答案中的文档片段说:
[Filters]可能在括号中有可选参数。
所以,看看提问者的模板过滤器:
@mod.app_template_filter('posts_page')
def posts(post_id, company_id):
pass
以下内容在模板中有效:
{{ post.id|posts_page(post.company_id) }}