django jinja2 分页的例子

仿照官方的文档:http://docs.djangoproject.com/en/1.2/topics/pagination/
jinja2的模板和django的模板还是有区别的,稍微改了下官方的例子
def news_list(request):
    """列表,测试分类使用"""
    users = UserState.objects.all()
    now = datetime.datetime.now()
    after_range_num = 5        #当前页前显示5页

    befor_range_num = 4       #当前页后显示4页
    
    p = Paginator(users,2)
    try:
        page = int(request.GET.get("page",1))
        
    except ValueError:
        page = 1
    
    try:
        cont = p.page(page)
    except(EmptyPage,InvalidPage):
        cont =p.page(p.num_pages)
        
    if page >= after_range_num:
        page_range = p.page_range[page-after_range_num:page+befor_range_num]

    else:
        page_range = p.page_range[0:int(page)+befor_range_num]
        
    return render_to_response("list.html",{
        'cont':cont,
        'page_range':page_range
    })


模板:

<body>
{%for bc in cont.object_list%}
	<font color="#3366CC">session_id is:</font>{{bc.session_key }}<br/>
{%endfor%}

{%if cont.has_previous() %}
            [url=?page={{ cont.previous_page_number() }}]上一页[/url]
{% endif %}

当前第{{cont.number}}页 /共 {{ cont.paginator.num_pages }}页({{cont.paginator.count}}条数据).

{%if cont.has_next() %}
            [url=?page={{cont.next_page_number()}}]下一页[/url]
{%endif%}
{{cont}}
 <div>
 
{% for p in page_range %}
{%- if cont.number==p %}
<span>{{p}}</span>
{% else %}
[url=?page={{p}}]{{p}}[/url]
{% endif %}
{% endfor %}
 
 </div>
</body>

jinja2的模板调用 has_nex的时候需要加上() ,另外就是他的if的语法要注意{%- if cont.number==p %} 总之jinja2替换掉原来django的模板还是很合适的。没有遇到太多的问题。

你可能感兴趣的:(html,django,python)