【问题标题】:Is it possible to create new tags in Mako?是否可以在 Mako 中创建新标签?
【发布时间】:2023-03-06 13:34:01
【问题描述】:

mako 新手,在文档中找不到...

我想做的事情之一是:

<%mytag n=12>
blabla ${x}
</%mytag>

它的工作原理如下:

如果X[n](此处为X[12])变量是int 或字符串,则使用x = X[12] 呈现内容
=> 使用X[12] = 23,它会呈现:blabla 23

如果X[n] 是一个列表,则执行for 循环,重复x in X[n] 的每个值的内容
=> 使用X[12] = [1, 2, 'bla'],它会渲染:

blabla 1
blabla 2
blabla bla

如果可能,请尝试回答主要问题(是否可以做自定义标签?),然后再就如何做我想做的事情提供建议,谢谢:)

【问题讨论】:

  • 当 Mako 为您提供所有 python 时,为什么要创建新标签?
  • 简单:让非pythonistas也能做到
  • @SlaterTyranus 能否请您发布一个关于如何在 Mako 中使用 python 代码给出的示例的答案?
  • 这可能是最接近的,你可以定义一个def,然后将嵌入的内容传递给它:docs.makotemplates.org/en/latest/…

标签: python mako


【解决方案1】:

"namespaces" 文档似乎描述了你所追求的,具体来说:

命名空间还可以从模块中导入常规 Python 函数。这些可调用对象至少需要一个参数context,这是Context 的一个实例。模块文件 some/module.py 可能包含可调用对象:

def my_tag(context):
    context.write("hello world")
    return ''

模板可以通过以下方式使用该模块:

<%namespace name="hw" module="some.module"/>

${hw.my_tag()}

..和:

“自定义标签”格式主要用于命名空间功能 识别身体内容,在 Mako 中被称为“def with 嵌入内容”:

<%mynamespace:somefunction arg1="some argument" args="x, y">
    Some record: ${x}, ${y}
</%mynamespace:somefunction>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多