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') %>