Есть ли способ заставить тег шаблона {% highlight %}
django-haystack показывать полную переданную переменную, а не удалять все до первого совпадения?
Я использую это так:
{% highlight thread.title with request.GET.q %}
Есть ли способ заставить тег шаблона {% highlight %}
django-haystack показывать полную переданную переменную, а не удалять все до первого совпадения?
Я использую это так:
{% highlight thread.title with request.GET.q %}
я никогда не использовал стог сена, но из документов и источник похоже на вас можете сделать свой собственный маркер и указать стогу сена использовать его вместо него
from haystack.utils import Highlighter
from django.utils.html import strip_tags
class MyHighlighter(Highlighter):
def highlight(self, text_block):
self.text_block = strip_tags(text_block)
highlight_locations = self.find_highlightable_words()
start_offset, end_offset = self.find_window(highlight_locations)
# this is my only edit here, but you'll have to experiment
start_offset = 0
return self.render_html(highlight_locations, start_offset, end_offset)
а затем установить
HAYSTACK_CUSTOM_HIGHLIGHTER = 'path.to.your.highligher.MyHighlighter'
в ваших настройках.py
Ответ @second работает, однако, если вы также не хотите, чтобы он обрезал конец строки, и у вас меньше максимальной длины, вы можете попробовать это. Все еще тестирую, но вроде работает:
class MyHighlighter(Highlighter):
"""
Custom highlighter
"""
def highlight(self, text_block):
self.text_block = strip_tags(text_block)
highlight_locations = self.find_highlightable_words()
start_offset, end_offset = self.find_window(highlight_locations)
text_len = len(self.text_block)
if text_len <= self.max_length:
start_offset = 0
elif (text_len - 1 - start_offset) <= self.max_length:
end_offset = text_len
start_offset = end_offset - self.max_length
if start_offset < 0:
start_offset = 0
return self.render_html(highlight_locations, start_offset, end_offset)