2013-11-28 49 views
0

我有相關的index.html分頁Django的

在我有一個表格來過濾查詢視圖

視圖,以及一個表,我把我從查詢中獲得的元素

最近我添加了分頁,因爲有時查詢可能有數千個結果。

我這裏使用的所示的例子https://docs.djangoproject.com/en/1.5/topics/pagination/

如果我使用的形式和進行查詢我得到的數據分頁,但如果我點擊下一步我失去了我在表單中的數據,所以查詢變化

我看到的問題是,形式迴應POST方法,但點擊「下一步」生產用GET方法的請求,所以當form = FilterForm(request.POST)執行,形式是有效的,但空

感謝

編輯:視圖

if request.method == 'POST': # If the form has been submitted... 

    form = FilterForm(request.POST) # A form bound to the POST data 
    if form.is_valid(): 
     total_events_list = Make the Query 
else: 
    form = FilterForm() # An unbound form 
    total_events_list = Make another Query 

paginator = Paginator(total_events_list, PAGE_LIMIT, orphans=9) 


try: 
    latest_events_list = paginator.page(page) 
except PageNotAnInteger: 
    # If page is not an integer, deliver first page. 
    latest_events_list = paginator.page(1) 
except EmptyPage: 
    # If page is out of range (e.g. 9999), deliver last page of results. 
    latest_events_list = paginator.page(paginator.num_pages) 


context = {'latest_events_list': latest_events_list, 'form': form} 
return render_to_response('db_interface/index.html', context, context_instance=RequestContext(request)) 

模板的

示例代碼,因爲它需要每次進行分頁時間的形式來篩選查詢

<p> Filter events </p> 
<form action="/db_interface/" method="POST">{% csrf_token %} 
    FORM 
<input type="submit" name ="filter" value="Submit" /> 
</form> 


{% if latest_events_list %} 

<form action="indexzip" method="POST"> 
    {% csrf_token %} 
    {% for event in latest_events_list %} 
    SHOW DATA 
    {% endfor %} 

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

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

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

    </form> 
+0

難道你不能只使用GET?我的意思是,如果它只是過濾,POST作爲REST動詞無論如何沒有什麼意義,因爲它不會改變任何數據。看到這裏:http://www.cs.tut.fi/~jkorpela/forms/methods.html – XORcist

+0

感謝您的鏈接。我使用GET進行了測試。問題在於頁面現在不會加載表單上的初始值,並且原始問題繼續 –

+0

但您可以將視圖函數/ html模板中的表單值傳遞給您!在分頁鏈接中,您只需將這些過濾器值添加到查詢字符串中。 – XORcist

回答

0

你應該在一些地方保存您的查詢,請求。有三種方法可以做到這一點:
1.製作Ajax請求並將表單數據和頁碼一起傳遞給分頁請求。
2.創建一個cookie /會話並存儲您的查詢並在需要時重新使用它。
3.創建一個cookie /會話並將查詢數據存儲在其中並手動分片數據。
個人而言,我會推薦第一個選項,因爲它更有意義,然後創建cookie /會話。另外他們也有有限的尺寸。