自定义标记中的键错误 '% trans "{}" %'

Key error '% trans "{}" %' in custom tag

我创建了一个简单的标签,使添加工具提示更加简单。我用 __init__.pyhtml_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

你知道问题出在哪里吗?

  1. 因为 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" %'
>>>
  1. 不要在 python 脚本中使用模板块。

我建议您使用 ugettext_lazygettex,否则.. 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)})