将属性添加到 mako 模板中的命名块

Add attributes to named blocks in mako templates

对于像这样的元标记:

<meta name="description" content="Sample Content">

我想在 mako 模板中写一个类似的命名块。我知道基本模板格式:

<%block name="meta"></%block>

我想了解如何在此命名块中添加内容属性及其值。

我认为命名块不能真正接受参数,除非它是一个似乎与此 use-case 不太匹配的页面参数。他们在 documentation.

您可以使用这样的函数,但过于冗长几乎达不到目的:

<%def name="meta(name, content)">
<meta name="${name}" content="${content}">
</%def>

${render_meta("description", "Sample Content")}

在我的布局、基础、模板中,我通常将典型的元标记组合在一个函数中,并在其中传递通用参数。

<!DOCTYPE html>
<html lang="en-us" class="ma0 h-100-ns">
    <head>
        <%def name="head_meta(title=u'', description=u'', keywords=u'')">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        %if title:
        <title>${title}</title>
        %endif
        %if description:
        <meta name="description" content="${description}">
        %endif
        %if keywords:
        <meta name="keywords" content="${keywords}">
        %endif
        <meta name="viewport" content="width=device-width, initial-scale=1">
        </%def>
        ${self.head_meta()}
    </head>
<body>
## ....
</body>
</html>

然后在继承模板中,我可能会扩展 head meta 以显式设置标题:

# -*- coding: utf-8 -*-
<%inherit file="/layout.mako"/> \
<%def name="head_meta()">
    ${parent.head_meta(
    title="Account")}
</%def>