1

情况:

我正在用 Python/mod_python 编写一个基本的模板系统,它读入一个主 HTML 模板,并用额外的 HTML 或 db 结果替换整个文档中的“:value:”实例,然后将其作为视图返回给用户。

我不是要替换 1 个子字符串的所有实例。值可能会有所不同。可接受的内容是有限的。它不是无限的。值的语法是 [colon]value[colon]。示例可能是“:gallery: , :related: , :comments:”。替换可能是附加的静态 HTML 或对函数的调用。功能也可能有所不同。

问题:

读取主 HTML 文件并用适当的替换值替换未知值组合的最有效方法是什么?


提前感谢您的任何想法/解决方案,

C

4

3 回答 3

4

已经存在许多模板选项。考虑genshimakojinja2django templates或更多。

你会发现你在重新发明轮子而没有什么好处。

于 2010-01-28T16:30:14.190 回答
1

如果您出于某种原因不能使用现有的模板系统,您的问题似乎最好用正则表达式解决:

import re

valre = re.compile(r':\w+:')

def dosub(correspvals, correspfuns, lastditch):
  def f(value):
    v = value.group()[1:-1]
    if v in correspvals:
      return correspvals[v]
    if v in correspfuns:
      return correspfuns[v]()  # or whatever args you need
    # what if a value has neither a corresponding value to
    # substitute, NOR a function to call?  Whatever...:
    return lastditch(v)
  return f

replacer = dosub(adict, another, somefun)

thehtml = valre.sub(replacer, thehtml)

基本上,您需要两个字典(一个将值映射到相应的值,另一个将值映射到要调用的相应函数)和一个函数,作为在任一字典中都找不到的值的最后尝试;上面的代码向您展示了如何将这些东西放在一起(我使用的是闭包,一个类当然也可以)以及如何将它们应用于所需的替换任务。

于 2010-01-28T16:36:07.140 回答
1

这可能是模板引擎的工作,而 Python 有很多选择。在这个 stackoveflow 问题中,人们列出了他们最喜欢的问题,并且有些人很有帮助地解释了原因:你最喜欢的 Python 模板引擎是什么?

于 2010-01-28T17:36:06.970 回答