2013-11-28 52 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 /会话。另外他们也有有限的尺寸。