Jor*_*ell 2 python django pagination
我正在尝试为 Django 制作一个搜索表单。
它是一个典型的搜索表单,然后返回一个匹配表。我希望对返回的表进行分页。
问题在于上一个和下一个按钮。返回查询的链接转到/records/search/?query=a(搜索示例为a)页面输出表及其上一个和下一个链接。但是链接重定向到/records/search/?page=2页面显示空白表格。
关于我应该为上一个/下一个传递哪些链接的任何帮助?
搜索.html:
{% extends 'blank.html' %}
{% block content %}
<div class="row">
<form id="search-form" method="get" action=".">
{{ form.as_p }}
<input type="submit" value="Search" />
</form>
</div>
<br><br>
//display table code//
{% if is_paginated %}
<div class="pagination">
<span class="step-links">
{% if agent_list.has_previous %}
<a href="?page={{ agent_list.previous_page_number }}{% for key,value in request.GET.items %}{% ifnotequal key 'page' %}&{{ key }}={{ value }}{% endifnotequal %}{% endfor %}">forrige</a>
{% endif %}
<span class="current">
Page {{ agent_list.number }} of {{ agent_list.paginator.num_pages }}.
</span>
{% if agent_list.has_next %}
<a href="?page={{ agent_list.next_page_number }}">Next</a>
{% endif %}
</span>
</div>
{% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
和搜索视图:
def search_page(request):
form = SearchForm()
agents = []
show_results=False
if request.GET.has_key('query'):
show_results=True
query=request.GET['query'].strip()
if query:
form=SearchForm({'query': query})
agents = \
Agent.objects.filter(Q(name__icontains=query))
paginator = Paginator(agents, 10)
page = request.GET.get('page')
try:
agents = paginator.page(page)
except PageNotAnInteger:
agents = paginator.page(1)
except EmptyPage:
agents = paginator.page(paginator.num_pages)
variables = RequestContext(request,
{ 'form': form,
'agent_list': agents,
'show_results': show_results,
'is_paginated': True,
}
)
return render_to_response('search.html', variables)
Run Code Online (Sandbox Code Playgroud)
我见过类似的问题,但我无法理解/使它们起作用。有什么帮助吗?
我在视图中添加了一个变量:
variables = RequestContext(request,
{ 'form': form,
'agent_list': agents,
'show_results': show_results,
'is_paginated': True,
**'query': query,**
}
)
Run Code Online (Sandbox Code Playgroud)
没有引号的查询是收到的 query变量。
然后只需将 URL 更改为:
<a href="**?query={{query}}**&page={{ agent_list.previous_page_number }}">Previous</a>
Run Code Online (Sandbox Code Playgroud)
如果您有更好的方法来回答问题,请执行或在您当前打开的 URL 后附加一个 URL。
我建议将解决方案放在模板标签中,如下所示:
myapp/templatetags/mytemplatetags.py:
from django import template
register = template.Library()
@register.simple_tag
def url_replace(request, field, value):
d = request.GET.copy()
d[field] = value
return d.urlencode()
@register.simple_tag
def url_delete(request, field):
d = request.GET.copy()
del d[field]
return d.urlencode()
Run Code Online (Sandbox Code Playgroud)
然后从模板做:
{% load mytemplatetags %}
...
<a href="?{% url_replace request 'page' agent_list.previous_page_number %}">previous</a>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4747 次 |
| 最近记录: |