创建内部具有jinja结构的字符串



我正在尝试生成django代码,但是当尝试创建模板时,

classname = 'person'
content = "<a href='{% url 'core.views.add_%s' %}' class="btn btn-default">{% trans 'Add' %}</a>n" % classname

我得到以下错误:

TypeError: %u format: a number is required, not unicode

Python试图评估"{%u",但我得到了错误。我也尝试过"格式化",但错误仍然存在。

您可以对jinja的%字符进行双重编码:

content = "<a href='{%% url 'core.views.add_%s' %%}' class="btn btn-default">{%%  trans 'Add' %%}</a>n" % classname

或对Jinjas {}字符进行双重编码并使用format():

content = "<a href='{{% url 'core.views.add_{classname}' %}}' class="btn btn-default">{{% trans 'Add' %}}</a>n".format(classname=classname)

或者简单地将模板分成三部分:

content = "<a href='{% url 'core.views.add_"
content += '%s' % classname
cotnent += " %}' class="btn btn-default">{% trans 'Add' %}</a>n"

在这种情况下,您可以进行简单的字符串连接:

content = "<a href='{% url 'core.views.add_" + classname + "' %}' class="btn btn-default">{% trans 'Add' %}</a>n"

示例:

>>> classname = 'person'
>>> content = "<a href='{% url 'core.views.add_" + classname + "' %}' class="btn btn-default">{% trans 'Add' %}</a>n"
>>> content
>>> '<a href='{% url 'core.views.add_person %}' class="btn btn-default">{% trans 'Add' %}</a>n'

如果您想在字符串中使用文字%,请使用两个百分号%%:

"<a href='{%% url 'core.views.add_%s' %%}' class="btn btn-default">{%% trans 'Add' %%}</a>n" % classname

如果使用format()方法,则需要使用{{}}:

"<a href='{{% url 'core.views.add_{}' %}}' class="btn btn-default">{{% trans 'Add' %}}</a>n".format(classname)

最新更新