我正在尝试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”的解决方案。
答案 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>
我希望这会有所帮助。