繁体   English   中英

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

[英]Django template tag to insert or replace URL parameter

是否有人知道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

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

由于我自己没有使用过这些工具,我只想推荐你:

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

希望有所帮助。

这是我在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>

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

这是通过将django.core.context_processors.request添加到TEMPLATE_CONTEXT_PROCESSORS (默认情况下未启用)来启用的。 这将向模板添加一个request变量,即HttpRequest对象

从那里,您可以使用{{ 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM