在Django模板中分组搜索结果
我在Django中有一个搜索结果页面。这个页面会列出视频的标题、描述和一些元数据,还会显示视频所属的话题。
我想尝试按话题来分组我的搜索结果,而不是直接返回所有视频。在每个组内,只显示前1到3个视频,并提供一个链接,点击后可以查看“在y话题中查看所有x个视频”。决定在每个组中显示1、2还是3个视频的标准是根据总数来计算的。如果组内视频少于10个,就只显示1个;如果在10到30个之间,就显示2个;如果30个或更多,就显示3个。(其实决定显示1到3个可能不是必须的,我可以只显示前3个)
我现在的代码比较简单,只是返回结果。但我不知道怎么在Django的模板语言中设置这些分组。我想我可以在视图中处理这个问题,但希望能找到一些简单的过滤器来帮助我在模板中实现。谢谢任何建议。以下是我目前的代码:
<h4>Search Results</h4>
<p>{{ res.hits.total }} matches found for <span id="qresult">{% if q %}'{{ q }}'{% else %}all{% endif %}</span></p>
</div>
<ul class="search-list" id="search-results">
{% if res.hits.total > 0 %}
{% for h in reshh %}
{% with h|get_underscore_value:"_source" as source %}
<li><a href='/video/{{ source.slug }}'>{{ source.title }}</a>
<p>{{ source.description }}</p>
<span class="sr-meta" style="">metadata</span>
<p>(topic: {{ source.topic_name }})</p></li>
{% endwith %}
{% endfor %}
{% endif %}
</ul>
顺便说一下,我的数据是从elasticsearch中提取的。res.hits.hits._source就是我的结果所在的地方。“get_underscore_value”是一个自定义过滤器,用来解决Django对我变量名以_开头的抱怨……
1 个回答
0
看看这个叫做 regroup
的模板标签吧:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup