Django render_to_string行为

时间:2015-01-11 15:16:35

标签: python django django-templates

我有以下HTML文件template.html:

{% load i18n %}
<p>{% blocktrans %}You have following email: {{ request.user.email }}.{% endblocktrans %}</p>

现在在python:

if request.user is not None and request.user.is_authenticated():
   text = render_to_string('template.html', context_instance=RequestContext(request)))

但是request.user.email在模板中是空的。即使我写{{ user.email }},它仍然是空的。 如何正确呈现用户并调用其方法? 例如,{{ request.user.get_short_name }}也不起作用。

更新: 问题出在{% blocktrans %}

<p>You have following email: {{ request.user.email }}.</p>

有人可以说出原因吗? 我还没有翻译消息,但我认为它会呈现原样。

1 个答案:

答案 0 :(得分:4)

如文档所述,您无法在{% blocktrans %}内直接使用模板表达式,只能使用变量:

  

翻译模板表达式 - 比如访问对象属性   或使用模板过滤器 - 您需要将表达式绑定到本地   变量在翻译块中使用。例子:

{% blocktrans with amount=article.price %}
That will cost $ {{ amount }}.
{% endblocktrans %}

cf https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#blocktrans-template-tag

因此,您的模板代码应如下所示:

{% load i18n %}
<p>
{% blocktrans with email=request.user.email %}
 You have following email: {{ email }}.
{% endblocktrans %}
</p>