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

时间:2017-03-02 11:53:16

标签: python django django-templates django-template-filters

我创建了一个简单的标记,使添加工具提示变得更加简单。我已经使用__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" %}一起使用。

这是错误:

  

/ 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>')

提出:

  

格式字符串

中遇到单个'}'

你知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:1)

  1. 因为format_html只检查+返回你的html字符串,是否有效。
  2. 一个例子,

    >>> 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脚本中使用模板块。
    2. 我建议您使用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)})