用于删除特定 URL 查询字符串的 Django 自定义模板标签

Django custom template tags to remove specific URL query strings

我正在尝试为删除指定的 URL 查询字符串的 django 模板创建一个简单的标记。它的目的是删除一些应用的过滤,即从 http://localhost/?saved=1&source=news&week=5

中删除 saved=1

我创建了一个自定义标签:

@register.simple_tag(takes_context=True)
def defilter(context, *args):
    query = context['request'].GET.copy()
    for key in args:
        if key in query.keys():
            query.pop(key)
    return query.urlencode()

然后我在 django 模板中创建了一个 link,它重构了 url 获取参数但删除了指定的键:

<a href="{% url 'articles' %}?{% defilter saved %}">Remove Saved</a>

知道为什么这不符合我的预期吗?我没有收到任何错误,只是没有删除指定的密钥。

非常感谢

我会为后代回答我自己的问题。我最终从 kwargs 更改为单个 arg。

@register.simple_tag(takes_context=True)
def defilter(context, field):
    query = context['request'].GET.copy()
    if query.get(field):
        query.pop(field)
    return query.urlencode()

满足我的需要。