У меня есть скрипт, который выделяет определенные блоки текста на странице, сгенерированной Django. Сценарий работает нормально, пока блок текста не содержит апостроф. Это не будет соответствовать в этом случае. Я пробовал различные комбинации фильтров, экранирование и т. Д. c. но не могу заставить его работать. Ниже мой код.
jQuery в шаблоне:
<script>
$(document).ready(function(){
// Displays highlights if any exist
{% for highlight in agenda.highlights.all %}
$("div.card-body div.mb-3:contains('{{agenda.agenda_text|hl_slice:highlight }}')" ).css( "background-color", "#FFFF00" ).attr("id", "{{ highlight.id }}");
{% endfor %}
});
</script>
Django Пользовательский фильтр "hl_slice"
@register.filter
@stringfilter
def hl_slice(agenda_text, hl):
"""
Returns the highlighted portion of the agenda text.
"""
try:
hl_text = strip_tags(agenda_text[hl.start:hl.end])
return hl_text
except (ValueError, TypeError):
return hl # Fail silently.
Текстовые блоки в шаблоне (генерирует HTML элементов, содержащих текст)
{{ agenda.agenda_text|safe }}
Вот пример текста, который разрывает соответствие:
"K. 20-378. Уведомление городских управляющих и помощников городского управляющего о выполнении соглашений с профессиональными консультантами и поправок к соглашению, а также опубликованных c строительных контрактов, не подпадающих под действие Закона о конкурсных торгах, со стоимостью контракта в размере менее $ 25 000 "
Если я уберу апострофы, текст будет совпадать, поэтому я знаю, что это как-то связано с тем, как javascript интерпретирует апостроф по сравнению с тем, что HTML и Django делают. Кто-нибудь знает, как заставить их сравнивать яблоки с яблоками?