14 Stimmen

Django Heuhaufen Highlight Vorlagen Tag Problem

Gibt es eine Möglichkeit, dass der {% highlight %}-Template-Tag von django-haystack die vollständige übergebene Variable anzeigt, anstatt alles vor dem ersten Treffer zu entfernen?

Ich benutze es so:

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

0 Stimmen

5 Jahre später und ich habe das gleiche Problem. Es gibt sogar ein Problem auf Github: github.com/django-haystack/django-haystack/issues/748

10voto

second Punkte 26650

Ich habe noch nie Haystack verwendet, aber aus einem schnellen Blick in der Dokumentation und dem Quellcode sieht es so aus, als ob du deinen eigenen benutzerdefinierten Highlighter erstellen und Haystack sagen kannst, dass es stattdessen diesen verwenden soll

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)

        # dies ist meine einzige Bearbeitung hier, aber du musst experimentieren
        start_offset = 0
        return self.render_html(highlight_locations, start_offset, end_offset)

und dann setze

HAYSTACK_CUSTOM_HIGHLIGHTER = 'Pfad.zu.deinem.highlighter.MyHighlighter'

in deiner settings.py

2voto

mynameistechno Punkte 3340

Die Antwort von @second funktioniert, aber wenn Sie auch nicht wollen, dass am Ende des Strings abgeschnitten wird und Sie die maximale Länge unterschreiten, können Sie dies versuchen. Ich teste es noch, aber es scheint zu funktionieren:

class MyHighlighter(Highlighter):
    """
    Benutzerdefinierter 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)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X