我有以下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>
有人可以说出原因吗? 我还没有翻译消息,但我认为它会呈现原样。
答案 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>