Render
Import 位置:
src.plugins.nonebot_plugin_render
定义
async def render_template(name: str, title: str, user_id: str, templates: dict) -> bytes
参数
name
(str): 模板名称title
(str): 标题user_id
(str): 用户IDtemplates
(dict): 模板变量
返回
bytes
: 渲染后的图片
模板编写
Render 读取的模板储存在 src/templates
中,后缀为 *.jinja
。
一个模板的格式如下:
html
{% extends base %}
{% block body %}
{{ content }}
{% endblock body %}
基模板
html
{% extends base %}
这里使用了一个模板变量 base
作为基模板的名称,这个变量在渲染时会自动填充为对应主题的基模板。
内容块
header
拓展页面页面的头部。
body
卡片主体内容。
card
卡片。
WARNING
此块会覆盖 body
块。
保留变量
DANGER
这些变量会在渲染时被自动填充,请避免使用这些模板变量名。
base
: 主题基模板的相对路径。main_title
: 页面主标题。footer
: 页面页脚(版权信息)。
主题
Render 支持主题,主题基模板储存在 src/templates/base
中,主题列表储存在 src/plugins/nonebot_plugin_render/themes.json
中。
基模板
一个主题的基模板需要定义以下变量和内容块:
模板变量
main_title
: 页面主标题。footer
: 页面页脚(版权信息)。
内容块
header
: 页面拓展头部。body
: 卡片主体内容。card
: 卡片。
TIP
一般来说,card
会覆盖 body
块。
主题配置
主题配置是一个 JSON 文件,格式为 "主题ID": "主题模板相对于 src/templates 的路径"
。
本地化
所有向用户展示的文本都要被本地化。
本地文件引用
可以使用 {% include "xx" %}
块或 src=xxx
引入本地文件。 使用相对引入时,基路径为 src/templates
。
使用
这是 Boothill 插件中渲染的代码:
python
await render_template(
"boothill.html.jinja",
await lang.text("image.title", user_id),
user_id,
{
"content": ...,
},
)
render_template
函数会自动根据用户加载主题配置,并渲染模板。
TIP
Render 插件的 Jinja2 配置会转义模板变量的所有 HTML 标记。