mirror of
https://github.com/rachelos/we-mp-rss.git
synced 2026-11-03 17:01:40 +08:00
2.3 KiB
2.3 KiB
模板解析器优化总结
主要改进
1. 增强的过滤器支持
- 语法:
{{ variable|filter }}和{{ variable|filter(arg1, arg2) }} - 内置过滤器:
default: 设置默认值length: 获取长度safe/escape: HTML转义upper/lower/capitalize/title: 字符串大小写trim: 去除空白truncate: 截断字符串wordcount: 单词计数replace: 字符串替换round/int/float: 数值处理first/last: 获取首尾元素join: 列表转字符串
2. elif 条件链支持
- 语法:
{% if condition %}...{% elif condition %}...{% else %}...{% endif %} - 支持多重条件判断
- 正确处理条件链的逻辑流程
3. 增强的变量表达式
- 嵌套属性:
{{ user.name }} - 默认值:
{{ missing_var or 'default' }} - 过滤器链:
{{ text|upper|truncate(10) }} - 复杂过滤器:
{{ list|join(', ')|default('empty') }}
4. 自定义过滤器注册
register_filter(name, func): 注册单个过滤器register_filters(dict): 批量注册过滤器- 支持带参数的自定义过滤器
5. 改进的参数解析
- 支持字符串字面量(单/双引号)
- 支持数字、布尔值、None
- 支持变量引用作为参数
使用示例
基础过滤器
{{ user.name|capitalize|default('匿名用户') }}
{{ long_text|truncate(50) }}
{{ items|join(', ') }}
{{ price|currency('¥') }} # 自定义过滤器
elif 条件链
{% if score >= 90 %}
<p>优秀成绩: {{ score }}分</p>
{% elif score >= 80 %}
<p>良好成绩: {{ score }}分</p>
{% elif score >= 60 %}
<p>及格成绩: {{ score }}分</p>
{% else %}
<p>需要努力: {{ score }}分</p>
{% endif %}
自定义过滤器
def currency(value, currency_symbol='¥'):
return f"{currency_symbol}{value:,.2f}"
parser.register_filter('currency', currency)
兼容性
- 完全向后兼容原有语法
- 保持原有的所有功能:变量、条件、循环、include、数学表达式
- 新增功能不影响现有模板
性能优化
- 优化了变量表达式解析逻辑
- 改进了条件链处理效率
- 减少了重复代码
这次优化使得模板解析器更接近 Jinja2 的标准语法,提供了更强大和灵活的模板处理能力。