首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

问一个自定义分页代码的奇怪有关问题。代码如下

2013-09-05 
问一个自定义分页代码的奇怪问题。代码如下我没有用django 默认的分页。在views.py 里代码: 功能是实现列表

问一个自定义分页代码的奇怪问题。代码如下
我没有用django 默认的分页。

在views.py 里代码: 功能是实现列表并在列表中分页

def categorylist(request, pk):
        category = get_object_or_404(Category, pk=pk)
        #paginate_by=ITEMS_PER_PAGE
        msg_list = category.msg_set.all().order_by('-is_top', '-id')
        paginator = Paginator(msg_list, 6)
        page = request.GET.get('page')
        try:
                contacts = paginator.page(page)
        except PageNotAnInteger:
                contactss = paginator.page(1)
        except EmptyPage:
                contacts = paginator.page(paginator.num_pages)
        return render_to_response('cate_msg_list.html', {'msg_list': msg_list, 'user':request.user, 'contacts': contacts})



urls.py     
url(r'^class/(?P<pk>\d+)/$', categorylist),



在html里 'cate_msg_list.html'
<li><DIV class=page>{% for contact in contacts %}
    {{ contact.full_name|upper }}<br />
{% endfor %}

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

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

        {% if contacts.has_next %}
            <a href="?page={{ contacts.next_page_number }}">下一页</a>
        {% endif %}



    </span>

</div>
</DIV></li>





问题如下:
我这样打开列表后。发现虽然有上一页。下一页的按钮。但是点了地址到了?next=2 ,3 等。但是所有信息还是在一个页面上。没有达到分页的效果。

如果我在分页模板前面加上:{% if is_paginated %}.....{% endif %}
这样竟然发现。那分页部分全部不见了。这说明。如果我分页就不运行:{% if is_paginated %}.....{% endif %} 这之间的代码。这是怎么回事? 是分页代码写的有问题?
还有一个:
{% for contact in contacts %}
    {{ contact.full_name|upper }}<br />
{% endfor %}
 这句的作用是什么?

谢谢
[解决办法]
最后传给模板的列表不是contacts 用 contacts.object_list
[解决办法]
1. 点下一页后,服务器得到的请求的url是什么,估计是不能匹配你的url rule了?我觉得生成的下一页的连接应该为(把pk也传过来):

<a href="/class/{{ pk }}/?page={{ contacts.next_page_number }}">下一页</a>

或者也许下面这个也可以
<a href="{{ pk }}/?page={{ contacts.next_page_number }}">下一页</a>


2. is_paginated是django的listview分页时设定的一个变量,现在你是在自己做分页,所以没有is_paginated这个值(或者它没有有意义的值)。

3. 
{% for contact in contacts %}
    {{ contact.full_name
[解决办法]
upper }}<br />
{% endfor %}


对contacts中的每一个contact,在页面中加上下面一行:大写的contact的全名。

[解决办法]
msg_list不需要传给template,感觉你的template文件出问题的概率更大

热点排行