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)
您可以在此处使用正则表达式:
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)