如何使用Bottle的SimpleTemplate引擎创建可在多个模板中使用的宏?
我需要在我的Bottle应用程序中的某些地方格式化链接。之前,所有的链接都放在一个SimpleTemplate文件里,我定义了一个宏,长得像这样:
%def mylink(obj):
<a class="mylink" href="{{ get_url('view', id=obj.id) }}">{{ obj.title }}</a>
%end
每当我需要格式化一个指向obj
的链接时,我就用:
%mylink(some_obj)
现在我需要在多个模板中使用这种格式的链接。我把模板的定义移动到了一个叫macros.html
的单独文件里,然后尝试用%include
把这个文件引入到我需要宏的模板中:
<!-- macros.html -->
%def mylink(obj):
<a class="mylink" href="{{ get_url('view', id=obj.id) }}">{{ obj.title }}</a>
%end
<!-- somepage.html -->
%include macros
...
%mylink(some_obj)
...
但是,Bottle无法在这样的布局中找到mylink
这个名字。
我知道我可以这样做:
<!-- mylink.html -->
<a class="mylink" href="{{ get_url('view', id=obj.id) }}">{{ obj.title }}</a>
<!-- somepage.html -->
...
%include mylink obj=some_obj
...
不过,我不太想这样做,因为我觉得这样速度不太快(每个页面上我有很多链接需要格式化)。
我是不是漏掉了其他的选择?
1 个回答
0
%include
语句会立即显示被包含的模板。
也许你可以使用 %rebase
命令来解决这个问题,把你的宏放到基础模板里。