根据django1.5写的paginator分页函数与代码。怎么一直不显示呢?代码如下

cndeer 2013-08-10 11:13:27
根据django1.5写的分页代码
views.py 的分页函数
def listing(request):
msg_list = Msg.objects.all()
paginator = Paginator(msg_list, 6)
page = request.GET.get('page')
try:
msgpages = paginator.page(page)
except PageNotAnInteger:
msgpages = paginator.page(1)
except EmptyPage:
msgpages = paginator.page(paginator.num_pages)
return render_to_response('pagination/list.html', {'msgpages': msgpages})


urls.py
                       url(r'^$',
ListView.as_view(
#paginate_by=ITEMS_PER_PAGE,
queryset=Msg.objects.order_by('-id'),
context_object_name='msg_list',
template_name='msg_list_page.html'
)),


模版
msg_list_page.html
{% extends "base.html" %}

{% block title %}留言列表{% endblock %}

{% block content %}
<table class="msglist">
<caption><h2>Django 留言本</h2></caption>
{% include "msg_list.html" %}
</table>
{% include "pagination/list.html" %}
{% endblock %}



list.html
{% for msgpage in msgpages %}
{{ msgpage.full_name|upper }}
{% endfor %}

<div class="pagination">
<span class="step-links">
{% if msgpages.has_previous %}
<a href="?page={{ msgpages.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ msgpages.number }} of {{ msgpages.paginator.num_pages }}
</span>
{% if msgpages.has_next %}
<a href="?page={{ msgpages.next_page_number }}">next</a>
{% endif %}
</span>
</div>




结果总是只显示模板里的: Page of 两个字。别的都不显示。哪里出了问题了?多谢。
...全文
267 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cndeer 2013-08-22
  • 打赏
  • 举报
回复
多谢 CrySleeper 已经解决了。 我统一了变量。真的换了contacts。 我昨天换的时候只换了一个。 现在换成: <DIV id=content> <UL> {% if contacts %} {% for msg in contacts %} 是早了没明白过了。 多谢CrySleeper 我中午结贴。
cndeer 2013-08-22
  • 打赏
  • 举报
回复
就是你理解的那样啊。 很显然msg_list是整个list,不是分页里的子list 这句。那怎么才能显示分页里的子list? 用什么办法?在哪里截断?
CrySleeper 2013-08-22
  • 打赏
  • 举报
回复
改过之后的输出是什么样子的?我不是很清楚你要实现什么?我的理解是:你有一个list,你希望分页显示这个list,对吧?如果是这个样子的话,你就要明确在template里显示什么,很显然msg_list是整个list,不是分页里的子list。如果你的意图并非这个样子,那么抱歉我理解错了。建议你还是好好研究一下django的资料,官方文档非常详细的。
CrySleeper 2013-08-21
  • 打赏
  • 举报
回复
url只是影射到view,view再根据template生成输出。你现在只想显示一个page的内容,那么就不要传msg_list到模板里,也不要在模板里使用msg_list,每个page里的list的显示应该和msg_list 的显示方式一致,我感觉把你模板里的msg_list都换成contacts就应该差不多了
cndeer 2013-08-21
  • 打赏
  • 举报
回复
谢谢。看到你回的我那个贴子。我在这里再回复一下吧。 http://bbs.csdn.net/topics/390556749 回:CrySleeper 我传msg_list 到模板。是因为我把分页列表的分页码与列表信息数据都写在一个模板了 因为我以前把列表与分页代码放到两个模板里的时候。 不知道怎么让分页代码的函数执行。 比如 msg_list 传到 msg_list_page.html 里,把分页函数与模板放到 list.html里 在msg_list.html里{% include "list.html" %} 就像这个页面提问:http://bbs.csdn.net/topics/390544106 我的信息放在msg_list_page.html里。我用url 访问 msg_list_page.html 的时候。 list.html里面的分码不执行。你说要把那分页函数也映射到url里。映射地址不就成了两个了? 一个url 访问 list.html 里面的 (这里面是分页代码) 一个url访问 msg_list_page.html 里面的。(列表数据) 他们怎么结合到一起? 不知道 这样说能说明白不。我现在对这个是个盲点。多谢指教。
cndeer 2013-08-21
  • 打赏
  • 举报
回复
还是不行。。。。我这样提问吧。多谢。如果有时间你写一个你的分页代码或例子给我参考一下吧?多谢 我现在的情况是。 models.py 里有
from django.db import models

class Category(models.Model):
    cname = models.CharField(verbose_name=u'信息分类', max_length=30)
    baseType = models.ForeignKey('self', null=True, blank=True, verbose_name=u'所属分类')

    def __unicode__(self):
        return self.cname


class Msg(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    category = models.ForeignKey(Category, verbose_name='信息分类')

    def __unicode__(self):
        return self.title
然后想 调用每个catetory 列表的信息 views.py 里这样写:
def categorylist(request, pk):
    category = get_object_or_404(Category, pk=pk)
    msg_list = category.msg_set.all().order_by('-is_top', '-id')
    return render_to_response('cate_list.html', {'msg_list': msg_list, 'user':request.user})



cate_list.html里这样写:
<UL> {% if msg_list %}
{% for msg in msg_list %} <LI>
{{ msg.title }}   </li>
{% endfor %}
</UL>
分页代码在这里应该怎么写?
{% endif %}
这样的分页代码在views.py 与 cate_list.html 按你的思路应该怎么写呢? 多谢
CrySleeper 2013-08-12
  • 打赏
  • 举报
回复
1. 使用ListView,设置paginate_by,listing函数不需要,ListView自身就可以处理 但是context_object_name要一致,pagintor可以直接从ListView的context里拿到的 2. 不使用ListView,将url直接映射到listing函数里
CrySleeper 2013-08-12
  • 打赏
  • 举报
回复
django的文档里有,你也可以查看ListView的py文件
cndeer 2013-08-12
  • 打赏
  • 举报
回复
h\谢谢Crysleeper。现在这样是可以了。但是有一点不太明白。这个page_obj 是哪里来的? 我从Lib\site-packages\django\core 这里面的patinator.py 里也没发现这个。
CrySleeper 2013-08-12
  • 打赏
  • 举报
回复
{% if is_paginated %}
<table class="noframe">
<tr>
{% if page_obj.has_previous %}
<td><a href="?page={{page_obj.previous_page_number}}">上一页</a></td>
{% endif %}
{% if page_obj.has_next %}
<td><a href="?page={{page_obj.next_page_number}}">下一页</a></td>
{% endif %}
<td>第{{page_obj.number}}页,共{{paginator.num_pages}}页</td>
<form action="" method="get">
<td> 到第</td>
<td><input name="page" type="text" size="2"></td>
<td>页</td>
<td><input type="submit" value="跳转"></td>
</form>
</tr>
</table>
{% endif %}
cndeer 2013-08-12
  • 打赏
  • 举报
回复
实际效果是这样的:


总是取不到应有的数字?
cndeer 2013-08-12
  • 打赏
  • 举报
回复
我用了ListView里的patinator了。
我这样用的对不:

urls.py 代码:
                       url(r'^$',
ListView.as_view(
paginate_by=ITEMS_PER_PAGE,
queryset=Msg.objects.order_by('-id'),
context_object_name='msg_list',
template_name='msg_list_page.html'
)),



模板里的代码:
msg_list_page.html

{% extends "base.html" %}

{% block title %}留言列表{% endblock %}

{% block content %}
<table class="msglist">
<caption><h2>Django 留言本</h2></caption>
{% include "msg_list.html" %}
</table>
{% include "pagination/paginator.html" %}
{% endblock %}




paginator.html 代码:

{% if is_paginated %}
<table class="noframe">
<tr>
{% if has_previous %}
<td><a href="?page={{previous}}">上一页</a></td>
{% endif %}
{% if has_next %}
<td><a href="?page={{next}}">下一页</a></td>
{% endif %}
<td>第{{page}}页,共{{pages}}页</td>
<form action="" method="get">
<td> 到第</td>
<td><input name="page" type="text" size="2"></td>
<td>页</td>
<td><input type="submit" value="跳转"></td>
</form>
</tr>
</table>
{% endif %}



但是实际效果总是这样:
cndeer 2013-08-12
  • 打赏
  • 举报
回复
我都测试过了。msgpages有数据。而且单独调用listing函数能看到有分页。但是不知道怎么在ListView里调用分页
panghuhu250 2013-08-11
  • 打赏
  • 举报
回复
你的http请求是listing处理的吗?从urls.py中的代码,看不出是怎么得到page参数和调用listing处理的。 在函数listing中,检查page变量,render-to-response之前,检查msgpages的内容。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧