Django模板标记用于插入或替换URL参数

Cer*_*rin 5 python django django-templates

是否有人知道Django模板标记采用当前路径和查询字符串并插入或替换查询字符串值?

例如,给/ some/custom/path请求?q = how + now + brown + cow&page = 3&filter = person

电话{% urlparam 'page' 4 %}会产生/some/custom/path?q=how+now+brown+cow&page=4&filter=person.

这从头开始写起来并不困难,但由于这似乎是一个非常常见的任务,我希望这样的标签可以内置.但是,通过阅读文档和谷歌搜索后,我似乎找不到任何人公开这样的标签.

Eri*_*ack 1

以下是我在 Django 1.3 项目中的做法。像你一样,我希望找到这个内置的,但最终在视图中对其进行编码:

def remove_url_param(url, params):
    if not isinstance(params, list):
        params = [params,]
    if isinstance(url, unicode):
        # urlencode doesn't like unicode
        url = url.encode('utf8')

    (scheme, netloc, path, query, fragment) = urlparse.urlsplit(url)
    param_dict = parse_qs(query)
    for p in params:
        try:
            del(param_dict[p])
        except KeyError:
            pass
    query = urllib.urlencode(param_dict, True)
    return urlparse.urlunsplit((scheme, netloc, path, query, fragment))
Run Code Online (Sandbox Code Playgroud)

然后我用它来创建基本 URL:

page_url_unordered = putils.remove_url_param( request.get_full_path(), ['order', 'ajax'] )
Run Code Online (Sandbox Code Playgroud)

然后在模板中:

<a href="{{ page_url_unordered }}&amp;order=price">Price</a>
<a href="{{ page_url_unordered }}&amp;order=size">Size</a>
Run Code Online (Sandbox Code Playgroud)