我有一个HTML按钮,该按钮应该按字母顺序对搜索结果进行排序。
按钮HTML代码:
<a href="?a-z=True" type="button" class="btn btn-outline-{% if 'a-z' in request.GET %}success{% else %}secondary{% endif %}">A-Z</a>
views.py
:
def query_search(request):
articles = cross_currents.objects.all()
search_term = ''
if 'keyword' in request.GET:
search_term = request.GET['keyword']
articles = articles.annotate(similarity=Greatest(TrigramSimilarity('Title', search_term), TrigramSimilarity('Content', search_term))).filter(similarity__gte=0.03).order_by('-similarity')
if request.GET.get('a-z') == 'True':
articles = articles.order_by('Title')
当前,URL包含用户搜索的关键字。例如,如果用户搜索“奶酪”,则URL将为search/?keyword=cheese
。当我单击排序按钮时,URL变为search/?a-z=True
并丢失了关键字,这意味着排序机制没有根据关键字对搜索结果进行排序。我认为我需要同时包含关键字和?a-z=True
的URL才能使排序机制作用于搜索结果。我该如何实现?
答案 0 :(得分:0)
我认为这不仅限于Django,您可以使用javascript来做到这一点:
添加一个将获取当前URL并执行排序功能并通过onclick
调用该功能的函数。
然后添加必要的参数。
<a href="#" onclick="sort('a-z=True')"type="button" class="btn btn-outline-{% if 'a-z' in request.GET %}success{% else %}secondary{% endif %}">A-Z</a>
然后在js部分中,您可以检查网址中是否包含keyword
参数,如果没有,则只需添加sort参数即可。
function sort(foo) {
let url = window.location.href;
// check if current url includes a "keyword" param else add the sort as param
if(url.includes("?") && url.includes("keyword")) window.location.href = url + "&" + foo;
else window.location.href = url + "?" + foo;
}
这只是个主意,因为我从未尝试过运行,所以可能行不通。