2014-11-05 73 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