【问题标题】:How do I create a macro, using Bottle's SimpleTemplate engine, that will be available in several templates?如何使用 Bottle 的 SimpleTemplate 引擎创建一个可以在多个模板中使用的宏?
【发布时间】:2011-10-15 09:41:45
【问题描述】:

我需要在我的 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
...

但是,我不愿意这样做,因为我觉得这不是很快(我在任何给定页面上都有许多要格式化的链接)。

我是否缺少其他选项?

【问题讨论】:

    标签: python templates bottle


    【解决方案1】:

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

    Myby,您可以使用 %rebase 命令解决此问题,将您的宏放入基本模板中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2011-08-25
      相关资源
      最近更新 更多