Применение эффекта выделения к тексту с помощью replace () (Django 2.1) - PullRequest
0 голосов
/ 28 января 2019

Я пишу пользовательский шаблонный фильтр, который выделяет ключевое слово, введенное в поисковую систему на странице результатов поиска, так же, как в результатах поиска Google.

Код для пользовательского фильтра:

register = template.Library()
@register.filter
@stringfilter
def highlight(value, search_term):
    return value.replace(search_term, "<span class='highlight'>%s</span>" % search_term)

Фильтр не изменяет класс CSS целевого слова на <span class='highlight'>.Вместо этого выводимый текст отображается в браузере буквально <span class='highlight'>word</span>.Например, «Самая желанная марка автомобилей на данный момент - <span class='highlight'>Tesla</span>».Как сделать так, чтобы метод replace() фактически изменял класс CSS целевого слова?

1 Ответ

0 голосов
/ 28 января 2019

Проблема заключается в том, что вам нужно автоматически выйти, когда фильтр вносит изменения в элементы HTML https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/#filters-and-auto-escaping

Рабочий код:

from django import template
from django.utils.safestring import mark_safe
from django.utils.html import conditional_escape
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter(needs_autoescape=True)
@stringfilter
def highlight(value, search_term, autoescape=True):
    return mark_safe(value.replace(search_term, "<span class='highlight'>%s</span>" % search_term))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...