2015-05-30 46 views
6

我用的是代碼的文檔進行分頁數據:尋呼在Django - 原來的查詢字符串丟失

try: 
    data = paginator.page(request.GET.get('page')) 
except PageNotAnInteger: 
    page = 1 
    data = paginator.page(1) 
except EmptyPage: 
    data = paginator.page(paginator.num_pages) 

和頁:

<div class="pagination"> 
     <span class="step-links"> 
      {% if data.has_previous %} 
       <a href="?page={{ data.previous_page_number }}">previous</a> 
      {% endif %} 

      <span class="current"> 
       <b>Page</b> {{ data.number }} of {{ data.paginator.num_pages }} 
      </span> 

      {% if data.has_next %} 
       <a href="?page={{ data.next_page_number }}">next</a> 
      {% endif %} 

     </span> 
    </div> 

但這裏有一個錯誤:當該url包含一個查詢字符串,並且一次單擊該尋呼機,原始查詢字符串就會丟失。例如:

example.com?var1=33&var2=44 

,然後當一個點擊 「第2頁」,則網址的

example.com?page=2 # var1=33&var2=44 is lost 

代替:

example.com?var1=33&var2=44&page=2 

我還沒有找到既沒有標準,也不簡單的方法來解決它。我怎樣才能做到這一點?

UPDATE:

當然

,參數的名字,他們的價值觀以及它們是否存在與否不得而知。

+0

分頁程序我曾經提到[這裏]這兩個簡單的解決方案之一(https://simpleisbetterthancomplex.com/snippet/2016 /08/22/dealing-with-querystring-parameters.html)。此外,其重要的是要注意,一個javascript解決方案(如在幾個SO帖子中建議)可能在這裏工作,但可能會影響搜索引擎優化,因爲頁面鏈接不會是真實的URL在那種情況下 – Anupam

回答

7

如果您在設置中激活django.core.context_processors.request,則可以直接在模板中訪問來自請求的參數。請參閱https://docs.djangoproject.com/en/1.7/ref/templates/api/#django-core-context-processors-request

然後,您可以直接訪問模板中的參數。在你的情況下,你需要過濾page參數。你可以這樣做:

href="?page={{ data.next_page_number }}{% for key, value in request.GET.items %}{% if key != 'page' %}&{{ key }}={{ value }}{% endif %}{% endfor %}" 
+0

看看我的更新 –

+0

這種方法應該使用未知參數 –

+0

讓我檢查... –

0

最簡單的方法是將包含在你的模板這些變量:

<a href="?var1={{var1}}&var2={{var2}}&page={{ data.next_page_number }}">next</a> 

只需添加var1var2context

這就是如果查詢字符串變量來自您的後端。如果他們來自前端/外部,您可以在模板中使用類似How can I get query string values in JavaScript?的東西,並直接編輯模板變量或將值傳遞到後端。

+0

看看我的更新 –

3

另一個可能的解決方案可以是在你的視圖中構造參數列表。優點:您可以在QueryDict上使用乾淨和富有表現力的方法。

這將是這個樣子:

get_copy = request.GET.copy() 
parameters = get_copy.pop('page', True) and get_copy.urlencode() 
context['parameters'] = parameters 

這就是它!現在你可以使用你的context變量的模板:

href="?page={{ paginator.next_page_number }}&{{ parameters }}" 

見,代碼看上去幹淨,漂亮。

注:假設,即包含在context字典您的上下文和你在paginator可變