自定义标记中的键错误 '% trans "{}" %'
Key error '% trans "{}" %' in custom tag
我创建了一个简单的标签,使添加工具提示更加简单。我用 __init__.py
和 html_tags.py
.
创建了一个 templatetags 文件夹
html_tags.py
from django import template
from django.utils.html import format_html
register = template.Library()
@register.simple_tag
def tooltip(text):
return format_html('<a href="#" data-toggle="tooltip" title="{% trans "{}" %}"><img src="{% static "icons/tooltip.png" %}"></img></a>'.format(text))
问题是它似乎不适用于我需要的 {% trans "text" %}
。
这是错误:
KeyError at /dashboard/alerts-settings/ '% trans "{}" %'
但我使用格式,所以 tt 应该是 {% trans "text" %}
而不是 {% trans "{}" %}
。
所以我尝试这样做:
format_html('<a href="#" data-toggle="tooltip" title="{{% trans "'+text+'" %}}"><img src="{{% static "icons/tooltip.png" %}}"></img></a>')
它提出:
Single '}' encountered in format string
你知道问题出在哪里吗?
- 因为
format_html
只检查 + return 你的 html 字符串是否有效。
一个例子,
>>> format_html('<a href="">dada</a>')
'<a href="">dada</a>'
>>>
>>> format_html('{% trans "foobar" %}')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/path/to/lib/python3.5/site-packages/django/utils/html.py", line 106, in format_html
return mark_safe(format_string.format(*args_safe, **kwargs_safe))
KeyError: '% trans "foobar" %'
>>>
- 不要在 python 脚本中使用模板块。
我建议您使用 ugettext_lazy
、gettex
,否则.. see more...,以您的情况为例;
from django.utils.translation import ugettext_lazy as _
@register.simple_tag
def tooltip(text):
return format_html('<a href="#" data-toggle="tooltip" title="%(text)s">'
'<img src="/static/icons/tooltip.png"></img></a>' % {'text': _(text)})
我创建了一个简单的标签,使添加工具提示更加简单。我用 __init__.py
和 html_tags.py
.
html_tags.py
from django import template
from django.utils.html import format_html
register = template.Library()
@register.simple_tag
def tooltip(text):
return format_html('<a href="#" data-toggle="tooltip" title="{% trans "{}" %}"><img src="{% static "icons/tooltip.png" %}"></img></a>'.format(text))
问题是它似乎不适用于我需要的 {% trans "text" %}
。
这是错误:
KeyError at /dashboard/alerts-settings/ '% trans "{}" %'
但我使用格式,所以 tt 应该是 {% trans "text" %}
而不是 {% trans "{}" %}
。
所以我尝试这样做:
format_html('<a href="#" data-toggle="tooltip" title="{{% trans "'+text+'" %}}"><img src="{{% static "icons/tooltip.png" %}}"></img></a>')
它提出:
Single '}' encountered in format string
你知道问题出在哪里吗?
- 因为
format_html
只检查 + return 你的 html 字符串是否有效。
一个例子,
>>> format_html('<a href="">dada</a>')
'<a href="">dada</a>'
>>>
>>> format_html('{% trans "foobar" %}')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/path/to/lib/python3.5/site-packages/django/utils/html.py", line 106, in format_html
return mark_safe(format_string.format(*args_safe, **kwargs_safe))
KeyError: '% trans "foobar" %'
>>>
- 不要在 python 脚本中使用模板块。
我建议您使用 ugettext_lazy
、gettex
,否则.. see more...,以您的情况为例;
from django.utils.translation import ugettext_lazy as _
@register.simple_tag
def tooltip(text):
return format_html('<a href="#" data-toggle="tooltip" title="%(text)s">'
'<img src="/static/icons/tooltip.png"></img></a>' % {'text': _(text)})