{{ message }}
-
{% for item in items %}
- {{ item }} {% endfor %}
{{ message | upper }}
``` 如果你需要自定义过滤器,可以在`Environment`对象上注册它们: ```python def my_filter(s): return s.replace('Python', '码小课') env.filters['myfilter'] = my_filter ``` 然后在模板中使用它: ```html{{ message | myfilter }}
``` #### 宏 宏允许你在模板中定义可重用的代码块。这对于创建表单、导航栏等常用组件非常有用。 ```html {% macro input(name, value='', type='text') %} {% endmacro %} ``` #### 继承 Jinja2支持模板继承,允许你创建一个基础模板(称为“父模板”),其中包含多个块(block),这些块在子模板中可以被覆盖或扩展。 ```html{% block content %}{% endblock %}
{% extends "base.html" %}
{% block title %}子页面标题{% endblock %}
{% block content %}
这是子页面的内容。
{% endblock %} ``` #### 上下文处理器 上下文处理器允许你为所有模板添加全局变量或函数,而无需在每个模板渲染时都手动传递它们。这在添加常用的帮助函数或全局设置时非常有用。 ```python @env.globals['url_for'] def url_for(endpoint, **values): # 这里应该是复杂的URL生成逻辑 return f"/{endpoint}" # 在模板中使用 首页 ``` ### 集成到Web框架 虽然上述示例展示了如何在独立Python脚本中使用Jinja2,但在Web应用中,你通常会将其集成到Web框架中。例如,在Flask框架中,Jinja2是默认的模板引擎,并且其集成非常直接和无缝。 ```python from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('template.html', title='码小课 - Flask与Jinja2', message='Flask集成了Jinja2,使模板渲染变得简单。') if __name__ == '__main__': app.run(debug=True) ``` 在这个Flask示例中,`render_template`函数负责加载模板并渲染它,同时自动处理模板文件的查找和数据传递。 ### 总结 Jinja2模板引擎以其灵活性、安全性和易用性成为Python Web开发中不可或缺的一部分。通过变量替换、控制结构、过滤器、宏、继承和上下文处理器等特性,Jinja2使得模板的编写和维护变得既高效又直观。无论是在独立Python脚本中还是在Web框架中,掌握Jinja2的基本用法和高级特性都将为你的Web开发之旅提供极大的便利。希望本文的介绍能帮助你更好地理解和使用Jinja2,并在你的“码小课”项目中发挥其最大的作用。