2014-11-05 76 views
1

我请求的页面:更改Django中的查询字符串?

example.com/stuff?&type=2&foo=bar&stage=unpublished 

我想一个链接页面(未设置typefoo相对于以前):

example.com/stuff?stage=unpublished 

而且我想这样做方便,如:

<a href=?{% url_params_now with foo=None type=None %}">go up</a> 

我该怎么做?有一些内置的方式,还是一些图书馆?


我用繁琐的

{{url}}?{% if type %}type={{type}}{% endif %}&{% if foo %}foo={{foo}}{% endif %}&{% if stage %}stage={{stage}}{% endif %} 
+0

{%url%}用参数不起作用? https://docs.djangoproject.com/en/dev/ref/templates/builtins/#url – danielfranca 2014-11-05 14:52:11

+0

@danielfranca URL params未绑定到GET变量。 – 2014-11-05 14:56:24

+0

只是'?stage = unpublished'吗?你不需要明确设置。另外,最好的办法是在视图中处理这个问题,因为没有任何东西阻止用户发送任意GET参数作为请求的一部分。 – karthikr 2014-11-05 14:59:44

回答

1

正如David所说,我创建了自己的模板标签。我可以拨打电话{% urlgen a=1 b=2 %}。其terser和整洁。

@register.simple_tag(name = 'urlgen') 
def urlgen(**kwargs): 
    with_present_values = dict([ (k,v) for k, v in kwargs.items() if v]) 
    return query_string_from_dict(with_present_values) 

from django.http import QueryDict 
def query_string_from_dict(dic): 
    query_dictionary = QueryDict('', mutable=True) 
    query_dictionary.update(dic) 
    if dic: 
     return '?' + query_dictionary.urlencode() 
    else: 
     return '' 

这里不讨论:注册模板标签和Django。

+0

不错的选择:)比if/endif ..更清晰 – 2014-11-05 16:12:40