2010-07-01 38 views
13

Có cách nào để tạo thẻ mẫu {% highlight %} của django-haystack hiển thị biến đầy đủ được chuyển vào, thay vì xóa mọi thứ trước trận đấu đầu tiên không?django haystack làm nổi bật vấn đề thẻ mẫu

Tôi đang sử dụng nó như thế này:

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

5 năm sau và tôi có cùng một vấn đề. Thậm chí còn có vấn đề trên Github: https://github.com/django-haystack/django-haystack/issues/748 – weeheavy

Trả lời

9

tôi chưa từng sử dụng đống cỏ khô, nhưng từ một cái nhìn nhanh chóng trong the docsthe source có vẻ như bạn có thể làm cho highlighter tùy chỉnh của riêng bạn và nói với đống cỏ khô để sử dụng mà thay vào đó

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) 

và sau đó thiết lập

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

trong settings.py của bạn

2

Câu trả lời bằng @second works, tuy nhiên nếu bạn cũng không muốn nó cắt phần cuối của chuỗi và bạn đang ở độ dài tối đa, bạn có thể thử điều này. Vẫn đang thử nghiệm nhưng có vẻ như hoạt động:

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) 
Các vấn đề liên quan