将属性添加到 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>
对于像这样的元标记:
<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>