2024-05-05 00:35:41 发布
网友
jinja2中是否有方法处理模板内的异常?
{% for item in items %} {{ item|urlencode }} <-- item contains a unicode string that contains a character causes urlencode to throw KeyError {% endfor %}
如何处理该异常,以便跳过该项或在不强制整个模板呈现失败的情况下处理它?
谢谢!
没有。只需处理urlencode过滤器函数中的异常。
{% for item in items %} {{ item | custom_urlencode_filter }} {% endfor %}
然后在任何文件中设置jinja2环境
def custom_urlencode_filter(value): try: return urlencode(value) except: # handle the exception environment.filters['custom_urlencode_filter'] = custom_urlencode_filter
关于custom jinja2 filters的更多信息
虽然jinja2在默认情况下没有办法处理这个问题,但是有一个解决方法。
由于模板语言不支持try,我们需要在python中定义一个helper函数,如下所示:
def handle_catch(caller, on_exception): try: return caller() except: return on_exception
此方法通过Environment.globals或在调用render方法时注入模板引擎。在本例中,它是通过render方法注入的。
my_template.render(handle_catch=handle_catch)
然后可以在模板本身中定义宏:
{% macro catch(on_exception) %} {{ handle_catch(caller, on_exception) }} {% endmacro %}
这可以用作:
{% for item in items %} {% call catch('') %} {{ item | custom_urlencode_filter }} {% endcall %} {% endfor %}
注:
没有。只需处理urlencode过滤器函数中的异常。
然后在任何文件中设置jinja2环境
关于custom jinja2 filters的更多信息
虽然jinja2在默认情况下没有办法处理这个问题,但是有一个解决方法。
由于模板语言不支持try,我们需要在python中定义一个helper函数,如下所示:
此方法通过Environment.globals或在调用render方法时注入模板引擎。在本例中,它是通过render方法注入的。
然后可以在模板本身中定义宏:
这可以用作:
注:
相关问题 更多 >
编程相关推荐