是否有人知道Django模板标记采用当前路径和查询字符串并插入或替换查询字符串值?
e.g。请求/ 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
。
这从头开始写起来并不困难,但由于这似乎是一项非常常见的任务,我希望这样的标签可以内置。然而,在阅读了docs和谷歌搜索后,我似乎无法找到任何人公开这样的标签。
答案 0 :(得分:2)
由于我自己没有使用过这些工具,我只想推荐你:
仅供参考,我个人使用jsurl库在javascript中进行此类网址操作。
希望有所帮助。
答案 1 :(得分: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 }}&order=price">Price</a>
<a href="{{ page_url_unordered }}&order=size">Size</a>
答案 2 :(得分:1)
我想在搜索页面上呈现一系列分页链接。该 URL包含多个查询参数(如我的示例中所示)。该 呈现分页链接的分页代码不应该是 明确给出所有这些参数。 Django的管理员似乎有 到处都是这种行为。
通过将django.core.context_processors.request
添加到TEMPLATE_CONTEXT_PROCESSORS
(默认情况下未启用)来启用此功能。这会向您的模板添加request
变量,即HttpRequest
object。
从那里,您可以使用{{ request.get_full_path }}
获取包含完整查询字符串的当前网址,然后将自定义查询附加到该网址。
如果您的网页为/search?q=foo+bar
,并且您希望新链接为/search?q=foo+bar&page=4
,<a href="{{ request.get_full_path }}&page=4">page 4</a>
。