代码之家  ›  专栏  ›  技术社区  ›  dani herrera

django过滤器组成过滤后的url

  •  1
  • dani herrera  · 技术社区  · 1 年前

    我正在使用 django-filter 我想链接到带有预设过滤器的视图。

    这个时候,我是这样做的:

    <a href='{{ url "order_list" }}/?year=2023'>
    

    urlnext = (
        reverse('order_list') +
        "?year=2023"
    )
    return HttpResponseRedirect(urlnext)
    

    我想知道是否存在更优雅的方法。谢谢

    1 回复  |  直到 1 年前
        1
  •  1
  •   willeM_ Van Onsem    1 年前

    使用 ?year=2023 不是个好主意。对于 2023 这确实不是问题。但是想象一下 价值 它本身包含一个问号或&符号,那么它将生成一个查询 ?keyword=foo&bar&key=bar ,所以它会“切断” &bar

    您可以使用 QueryDict 这基本上就是 request.GET request.POST 是:

    from django.http import QueryDict
    
    qd = QueryDict(mutable=True)
    qd['year'] = 2023
    
    return HttpResponseRedirect(f'{reverse('order_list')}?{qd.urlencode()}')

    例如,如果值(或键)包含“与”或问号,则它将 percent-encode  [wiki] 这些:

    >>> qd.urlencode()
    'keyword=foo%26bar%3F'