5

有谁知道 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.

从头开始编写这不会太难,但由于这似乎是一项非常常见的任务,我希望这样的标签是内置的。但是,在阅读了文档和谷歌搜索之后,我似乎找不到任何公开过这样一个标签的人。

4

3 回答 3

4

由于我自己没有使用过这些工具,所以我将向您推荐:

仅供参考,我个人使用jsurl库在 javascript 中进行这种 url 操作。

希望有帮助。

于 2013-05-09T19:23:52.247 回答
1

我想在搜索页面上呈现一系列分页链接。URL 包含几个查询参数(如我的示例中)。呈现分页链接的分页代码不必显式地给出所有这些参数。Django 的管理员似乎到处都有这种行为。

这是通过添加django.core.context_processors.requestTEMPLATE_CONTEXT_PROCESSORS启用的(默认情况下不启用)。这将为request您的模板添加一个变量,即HttpRequestobject

从那里,您可以使用{{ request.get_full_path }}完整的查询字符串获取当前 URL,然后将您的自定义查询附加到它。

如果您的页面是/search?q=foo+bar,并且您想要一个新的链接/search?q=foo+bar&page=4<a href="{{ request.get_full_path }}&page=4">page 4</a>

于 2013-05-09T20:46:01.723 回答
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))

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

page_url_unordered = putils.remove_url_param( request.get_full_path(), ['order', 'ajax'] )

然后在模板中:

<a href="{{ page_url_unordered }}&amp;order=price">Price</a>
<a href="{{ page_url_unordered }}&amp;order=size">Size</a>
于 2013-05-09T19:22:31.550 回答