包含模板标记中的Django变量替换

时间:2011-10-31 04:33:58

标签: django django-templates variable-subsitution

我有一个国际化的Django 1.3网站,并希望这样做:

{% include "snippets/button.html" with button_text=_("Logout {{ user.username }} now") %}

snippets/button.html看起来像这样:

<button
  type="{{ button_type|default:_('submit') %}"
  class="all_my special classes"
  {% if button_title %} title="{{ button_title }}"{% endif %}>
  <span class=ui-button-text>{{ button_text|default:_("Submit") }}</span>
</button>

我能看到的唯一方法就是:

{% include "snippets/button.html" with button_text="Logout "|add:user.username|add:" now" %}

但这是不可接受的,因为要翻译的字符串需要包括变量替换将发生的位置。我见过Interpolate Django template include variable,但不包括这种用法。

2 个答案:

答案 0 :(得分:0)

我认为在这种情况下,最好的选择是将已翻译的字符串添加到您的上下文中。

views.py

...
'button_text': _("Logout {} now").format(user.username),
...

然后在你的模板中:

{% include "snippets/button.html" with button_text=button_text %}

答案 1 :(得分:-1)

这样的事情可能让你继续:

{% blocktrans with value|filter as myvar %}
  This will have {{ myvar }} inside.
{% endblocktrans %}

从这里http://www.djangobook.com/en/1.0/chapter18/

它应该与包含一起使用,但我还没有测试过。