<p>好吧,我建议您使用<a href="http://jinja.pocoo.org/" rel="nofollow">Jinja2</a>模板,而不是使用Python模板字符串(虽然功能强大但有限)。你知道吗</p>
<p>这个模板引擎是开发web应用程序的著名工具。你知道吗</p>
<p>要实现自定义语言,可以使用<strong>过滤器</strong>。举个例子:</p>
<p>首先导入所需的模块:</p>
<pre><code>import random
from jinja2.environment import Environment
</code></pre>
<p>定义一个过滤器来计算一个随机数,如下所示:</p>
<pre><code>def random_int(value, x, y):
return "{0}".format(random.randint(x, y))
</code></pre>
<p><em>注意:这里不使用<strong>值</strong>参数。</em></p>
<p>定义Jinja环境并添加自定义筛选器:</p>
<pre><code>env = Environment()
env.filters["RANDOM_INT"] = random_int
</code></pre>
<p>然后您可以这样使用它(您必须稍微更改用户输入以符合Jinja模板语法):</p>
<pre><code>user_input = 'file write hi.txt {{ "" | RANDOM_INT(1, 10) }}'
template = env.from_string(user_input)
result = template.render()
</code></pre>
<p>结果是:</p>
<pre><code>print(result)
# file write hi.txt 9
</code></pre>
<p>Avantages:Jinja可以为您检查语法和缺少的格式。你知道吗</p>
<p><strong>编辑:更多示例</strong></p>
<p>您可以更改要使用的环境配置
单花括号而不是双花括号:</p>
<pre><code>env = Environment(variable_start_string="{", variable_end_string="}")
</code></pre>
<p>您可以使用内置函数和过滤器,而不是创建自定义过滤器。
例如:将<code>range()</code>函数与<code>random</code>过滤器一起使用:</p>
<pre><code>user_input = 'file write hi.txt { range(10) | random }'
template = env.from_string(user_input)
result = template.render()
print(result)
</code></pre>
<p>最后,您可以使用自己的函数扩展全局上下文</p>
<pre><code>env = Environment(variable_start_string="{", variable_end_string="}")
env.globals["RANDOM_INT"] = random.randint
user_input = 'file write hi.txt { RANDOM_INT(1, 10) }'
template = env.from_string(user_input)
result = template.render()
print(result)
</code></pre>