如何使用变量对已翻译的文本块进行URL编码?

时间:2014-01-24 10:59:13

标签: django localization django-templates

我正在尝试urlencode包含Django(1.6.1)模板中变量的已翻译文本块。我需要这样做,因为mailto链接包含翻译的主题:

<a href="mailto:me@example.com?subject=_('Hello {{ username }}')|urlencode">Send email</a>

除此代码产生以下输出外:

<a href="mailto:me@example.com?subject=Hello%20%7D%7Dusername%7D%7D%20">Send email</a>

因此,显然,username运算符未评估_()变量。如果我没有弄错,唯一可以评估变量的翻译标签是blocktrans

那么,将主题翻译存储在专用变量中会更棒。类似的东西:

{% blocktrans as subject %}Hello {{ username }}{% endblocktrans %}
<a href="mailto:me@example.com?subject={{ subject|urlencode }}">Send email</a>

除了“as”不是blocktrans的有效参数。

我知道我可以用javascript解决这个问题。我正在寻找更“Djangonic”的解决方案。

2 个答案:

答案 0 :(得分:0)

您可能必须在模板之外执行此操作。使用templatetag或在视图中。无论如何......而不是:

<a href="mailto:me@example.com?subject=_('Hello {{ username }}')|urlencode">Send email</a>

你需要这样的东西:

import urllib
d = {'subject':ugettext(u"Hello %s" % username)}

并更改

的主题部分
value = urllib.urlencode(d)

'<a href="mailto:me@example.com?%s">Send email</a>' % value

如果您正在翻译“hello”,那么您应该考虑翻译“发送电子邮件”:P

答案 1 :(得分:0)

尝试转移夹点括号中的翻译:

<a href="mailto:me@example.com?subject=_('Hello \{\{ username \}\}')|urlencode">Send email</a>

我希望这会有所帮助。