在里面创建带有jinja结构的字符串

时间:2015-11-24 14:26:09

标签: python django jinja2

我尝试生成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试图评估&#34; {%u&#34;我得到了那个错误。 我也试过&#34;格式&#34;但错误仍然存​​在。

3 个答案:

答案 0 :(得分:2)

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

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'

答案 1 :(得分:2)

您可以对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"

答案 2 :(得分:1)

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

"<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)