我创建了一个简单的标记,使添加工具提示变得更加简单。我已经使用__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" %}
一起使用。
这是错误:
/ dashboard / alerts-settings /'%trans“{}”%'
中的KeyError
但我使用格式,因此tt应该是{% trans "text" %}
而不是{% trans "{}" %}
。
所以我试着这样做:
format_html('<a href="#" data-toggle="tooltip" title="{{% trans "'+text+'" %}}"><img src="{{% static "icons/tooltip.png" %}}"></img></a>')
提出:
格式字符串
中遇到单个'}'
你知道问题出在哪里吗?
答案 0 :(得分:1)
format_html
只检查+返回你的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" %'
>>>
我建议您使用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)})