Проблема с тегом выделения шаблона django haystack

Есть ли способ заставить тег шаблона {% highlight %} django-haystack показывать полную переданную переменную, а не удалять все до первого совпадения?

Я использую это так:

{% highlight thread.title with request.GET.q %}

person Rick    schedule 01.07.2010    source источник
comment
Прошло 5 лет и у меня такая же проблема. На Github даже есть проблема: github.com/django-haystack/django-haystack /вопросы/748   -  person weeheavy    schedule 25.07.2015


Ответы (2)


я никогда не использовал стог сена, но из документов и источник похоже на вас можете сделать свой собственный маркер и указать стогу сена использовать его вместо него

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

person second    schedule 29.10.2011

Ответ @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)
person mynameistechno    schedule 08.05.2014