Jinja 模板引擎
Python Jinja2 模板引擎
https://palletsprojects.com/projects/jinja https://jinja.palletsprojects.com/en/stable/
pallets / jinja https://github.com/pallets/jinja
pip install Jinja2 https://pypi.org/project/Jinja2/
中文文档 https://docs.jinkan.org/docs/jinja2/
基础
什么是模板? 就是在静态 HTML 加入一些变量标签,然后引擎在渲染这个 HTML 时候会动态的把变量填入内容,生成一个最终的 HTML。
基础示例
Jinja2 模板关键语法
变量输出 {{ var }}
变量属性 {{ post.title }}
或 {{ post['title']}}
字典元素 {{ your_dict['key'] }}
列表 {{ your_list[0] }}
注释 {# This is a comment #}
无转义输出 {{ variable|safe }}
多行代码块
{% 开始 %}
HTML标签
{% 结束 %}
条件语句
{% if condition %}
...
{% endif %}
循环
{% for item in list %}
...
{% endfor %}
示例:
{% if user.is_admin %}
<p>{{ user.name }} (Admin)</p>
{% else %}
<p>{{ user.name }}</p>
{% endif %}
修剪空白
{%-
和 -%}
管道过滤器
{{ text | truncate(50) }}
继承与导入
{% extends 'base.html' %}
{% block content %}
EJS 模板语法
Hexo 默认使用 EJS(Embedded JavaScrip) 作为模板引擎,语法类似 JavaScript,通过 <% %>
标签嵌入逻辑。
变量输出 <%= variable %>
无转义输出 <%- raw_html %>
注释 <%# This is a comment %>
条件语句
<% if (condition) { %>
...
<% } %>
循环
<% for (item of list) { %>
...
<% } %>
示例:
<% if (user.isAdmin) { %>
<p><%= user.name %> (Admin)</p>
<% } else { %>
<p><%= user.name %></p>
<% } %>
模板继承、引入
<%- include('partials/header.ejs') %>