在Python Bottle中使用模板

1 投票
1 回答
2369 浏览
提问于 2025-04-18 12:19

目前,我在一个项目中使用Python的Bottle框架。我想换成使用像Jinja2这样的模板,这样可以通过扩展和包含的方式,避免重复写导航栏、页脚等内容。

在Jinja2中,我可以使用类似这样的代码:

{% extends base.html %}

{% block maincontent %}
<here my HTML code>
{% endblock %}

我发现可以通过导入Jinja2的视图和模板来在Bottle中使用这个功能,但这样的话,我就得把Bottle中的每一段Python代码都重新格式化成Jinja2的格式。

比如说:

从:

%for i in mylist:
<option>{{i}}</option>
%end

到:

{% for i in mylist %}
<option>{{i}}</option>
{% endfor %}

有没有办法在Bottle模板中使用扩展功能,而不需要改变我所有的Python代码呢?我找不到相关的教程。

1 个回答

2

Bottle这个框架使用的模板引擎叫做SimpleTemplate,它不支持继承的功能。也就是说,你不能像在一些其他模板引擎中那样,让一个模板继承另一个模板的内容。

不过,你可以使用include功能,把一些内容,比如页眉和页脚,分开来写。或者你可以用rebase功能,来模拟继承的效果。

当然了,SimpleTemplate的名字里就有个“简单”,所以如果你知道自己将来需要更复杂的模板功能,早点换到其他支持这些功能的模板引擎会更划算。

撰写回答