django haystack highlight template tag issue django haystack highlight template tag issue django django

django haystack highlight template tag issue


i've never used haystack, but from a quick look in the docs and the source it looks like you can make your own custom highlighter and tell haystack to use that instead

from haystack.utils import Highlighterfrom django.utils.html import strip_tagsclass 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)

and then set

HAYSTACK_CUSTOM_HIGHLIGHTER = 'path.to.your.highligher.MyHighlighter'

in your settings.py


The answer by @second works, however if you also don't want it to cut off the end of the string and you're under the max length you can try this. Still testing it but it seems to work:

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)