如何通过HTML按钮将URL组件添加到当前URL? (Django 2.1)

时间:2019-07-03 00:57:51

标签: django python-3.x

我有一个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才能使排序机制作用于搜索结果。我该如何实现?

1 个答案:

答案 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;
}

这只是个主意,因为我从未尝试过运行,所以可能行不通。