在 django 中突出显示搜索到的文本

D_P*_*D_P 3 django django-templates

在这里,我正在编写自定义模板过滤器,以便突出显示匹配的搜索文本。但它无法正常工作。这里发生的情况是,它仅突出显示完全匹配的文本。例如,如果我搜索,django但如果在标题中,它是Django它忽略了Django.

我想让它不区分大小写,这样如果用户搜索django,那么DJANGO也应该突出显示。

register = template.Library()
@register.filter(name='highlight')
def highlight(text,search):
    highlighted = text.replace(search, '<b class="text text-danger">{}</b>'.format(search))
    return mark_safe(highlighted)
Run Code Online (Sandbox Code Playgroud)

视图.py

def search_blogs(request):
    q = request.GET.get('q')
    if q:
        blogs = Blog.objects.filter(title__icontains=q).order_by('-created')
        return render(request,'blog/search_blogs.html',{"blogs":blogs,'q':q})
    else:
        messages.error(request,'Please enter some keyword to search')
        return redirect('blog:blogs')
Run Code Online (Sandbox Code Playgroud)

模板

{{blog.title|highlight:q}}
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

您可以在此处使用正则表达式:

from re import IGNORECASE, compile, escape as rescape

register = template.Library()

@register.filter(name='highlight')
def highlight(text, search):
    rgx = compile(rescape(search), IGNORECASE)
    return mark_safe(
        rgx.sub(
            lambda m: '<b class="text text-danger">{}</b>'.format(m.group()),
            text
        )
    )
Run Code Online (Sandbox Code Playgroud)