如何使用Bottle的SimpleTemplate引擎创建一个宏,它将在几个模板中提供?

时间:2011-07-28 18:53:58

标签: python templates bottle

我需要在我的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 :(得分:0)

%include语句立即呈现包含的模板。

Myby你可以使用%rebase命令解决这个问题,将你的宏放入基础模板。