【问题标题】:Simple HTML template in PythonPython中的简单HTML模板
【发布时间】:2012-07-25 09:42:35
【问题描述】:

我想用 Python 中的数据填充 HTML 模板。虽然我不知道任何 HTML,但我的一位同事会在我提供数据时准备 HTML 模板。然而,他对 Python 知之甚少。

您能否建议一个非常基本的模板框架,它可以很好地处理 HTML 和 Python 的这种分离(即 HTML 中没有太多特殊的语法;在 Python 数据代码中我知道的 HTML 也不多)?理想情况下,HTML 模板应该非常接近纯 HTML。

我还将表格作为数据,所以如果我不必准备 HTML 表格代码会很好,但他可以用一些最小的标记逻辑来完成。 理想情况下,即使我的同事应用了 CSS 等更高级的概念,系统也应该能够正常工作。

我找到了extensive list,但由于我不懂技术语言,所以很难判断哪个系统最符合我的要求。

编辑:关键是我们是新手,我们只需要一个基本的解决方案 :) - 但理想情况下,对我来说没有 HTML,对他来说除了纯 HTML 也没什么。

【问题讨论】:

  • Chameleon 和 Zope 页面模板(都实现相同的属性语言)提供了这一点;清晰的分隔和在未渲染的浏览器中仍然可以工作的模板。不幸的是,这类问题不适合本网站的格式,请参阅FAQ。像这样的问题往往会导致模糊的答案,这些答案也会很快过时。如果我们可以帮助您解决特定问题,请随时发布另一个问题!
  • 感谢您的解释。应该很容易为完整的新手设置的具体要求应该限制可能的答案……前提是每个人都阅读了所有问题。我不知道如何重新制定它:(
  • 你也可以看看“Mako”和“Jinja2”。如果您需要的不仅仅是 HTML 渲染器,请查看 Flask(它非常小,并且为 Jinja 和 Mako 提供了很好的集成)。

标签: python html template-engine


【解决方案1】:

django 有非常好的强大的模板引擎,其目的是将 HTML 与 python 逻辑分开(但这需要你完全使用 django,所以如果你只是想要模板的话,这可能是一种矫枉过正)。

如果您的模板真的简单(没有循环),您可以使用本机 python string.format 函数(我在为一些 Fortran 代码生成配置文件的辅助项目中使用它,但它不是太糟糕了)。

其他选择可能是jinja2,它非常接近 django 模板,但独立且更强大。

【讨论】:

  • 谢谢。 string.format 解决了所需的简单性,但是它可能太简单了,因为我仍然必须在 Python 端生成 HTML 表格标记。这就是我没有选择最简单解决方案的唯一原因。
  • 刚试过Jinja2 看了你的回答@jb:真的很棒。非常感谢!
【解决方案2】:

我可以建议看看 web2py 吗?在最基本的层面上,您可以简单地让您的同事创建 html 文件,然后在需要数据的地方将其替换为 {{=var}} var 可以由用 python 函数编写的 web2py 控制器检索。从该函数中,您可以将数据放在一起并使用“return dict(var=var)”将其返回为 html 视图。

如果您的视图如下所示:

<html>
    <head>
        <title>some title</title>
    </head>
    <body>
        <h1>{{=message}}</h1>
    </body>
</html>

控制器可能如下所示:

def index():
    message = "Hello World"
    return dict(message=message)

您也可以使用 django,正如其他人所提到的,但请查看链接以获取一些 web2py documentation

【讨论】:

  • 如果 OP 也在寻找控制器(不仅仅是模板引擎),我强烈建议使用 django。
【解决方案3】:

python中的简单模板为:https://docs.python.org/3.6/library/string.html#template-strings

自带语言,无需外部库。

这是一个如何使用模板的示例:

>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'

【讨论】:

  • 请不要只使用链接回答。请提供一些带有上下文的示例。以后链接可能失效了,你的回答就没用了
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 2011-02-26
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多