我有以下搜索查询views.py:
class SearchView(View):
def get(self, request, *args, **kwargs):
queryset = BlogPost.objects.all()
query = request.GET.get('q')
if query:
queryset = queryset.filter(
Q(title__icontains=query) |
Q(content__icontains=query)
).distinct()
context = {
'queryset': queryset,
'query': query,
}
return render(request, 'blogs/search_result.html', context)
Run Code Online (Sandbox Code Playgroud)
如果我搜索Tesla结果模板中显示的结果如下所示的单词:
请帮助我,如何在 Django 模板中以黄色突出显示搜索到的查询?谢谢你的帮助!
编辑:这是带有搜索框的模板代码
<div class="card my-4">
<div class="card-body">
<div class="card-title">Search blog</div>
<form action="{% url 'blog:search_blog' %}">
{% csrf_token %}
<input type="text" class="form-control" name="q" placeholder="What are you looking for?">
<input type="submit" value="Search" class="btn btn-success btn-sm mt-3">
</form>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是 result_search 的模板
{% block content %}
<div class="container bg-light w-100">
<h2 class="display-6 border-bottom py-3">Results for "{{ query }}"</h2>
{% for post in queryset %}
<div class="my-1">
<a class="link" href="{{ post.get_absolute_url }}">{{ post.title }}</a>
</div>
{% endfor %}
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
谢谢
您可以在模板过滤器中执行此操作。就像是:
@register.filter
def highlight_search(text, search):
highlighted = text.replace(search, '<span class="highlight">{}</span>'.format(search)
return mark_safe(highlighted)
Run Code Online (Sandbox Code Playgroud)
现在在您的模板中,您可以执行以下操作:
{% load my_tags %} # wherever you put the template filter
{% for post in queryset %}
<div class="my-1">
<a class="link" href="{{ post.get_absolute_url }}">{{ post.title|highlight_search:query }}</a>
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
您需要将 search_text 与呈现结果页面的上下文一起发送回去。
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |