【问题标题】:Object not iterable with django's pagination对象不能用 django 的分页迭代
【发布时间】:2011-03-21 22:34:48
【问题描述】:

我有一个显示事件列表的模板。为了准备我使用通用视图的事件列表,并设置'paginate_by'参数。奇怪的是,当我加载我的页面时,我看到了:

TemplateSyntaxError at /event/latest/
Caught an exception while rendering: 'int' object is not iterable

在 pagination.html 模板的第 9 行:

{% if is_paginated %}
{% load i18n %}
<div class="pagination">
    {% if page_obj.has_previous %}
        <a href="?page={{ page_obj.previous_page_number }}{{ getvars }}" class="prev">&lt;&lt; Prev</a>
    {% else %}
        <span class="disabled prev">&lt;&lt; Prev</span>
    {% endif %}
#here {% for page in pages %}
        {% if page %}
            {% ifequal page page_obj.number %}
                <span class="current page">{{ page }}</span>
            {% else %}
                <a href="?page={{ page }}{{ getvars }}" class="page">{{ page }}</a>
            {% endifequal %}
        {% else %}
            ...
        {% endif %}
    {% endfor %}
    {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}{{ getvars }}" class="next">Next &gt;&gt;</a>
    {% else %}
        <span class="disabled next">Next &gt;&gt;</span>
    {% endif %}
</div>
{% endif %}

这是我的看法:

def events_nearest(request):
    events = Event.nearest.all()

    return object_list(request,
            queryset = events,
            extra_context = {'title': 'Nearest events'},
            paginate_by = 12,
            template_name = 'event/events_date.html')

还有型号:

class NearestManager(models.Manager):
    def get_query_set(self):
        return super(NearestManager, self).get_query_set().order_by('-data')

class Event(models.Model):        
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=120)
    slug = models.SlugField(max_length=255, unique=True, verbose_name='Slug')
    about = models.TextField()
    city = models.ForeignKey(City)

    objects = models.Manager()
    nearest = NearestManager()

有什么想法会导致这种情况吗?

【问题讨论】:

  • 大概 pagination.html 正在由自定义模板标签呈现。请您显示此标签的代码。

标签: django django-templates pagination django-pagination


【解决方案1】:

对于任何偶然发现这篇文章的人:

与 Django 1.4 及更高版本(据我所知)一样,分页的可迭代对象现在是 paginator.page_range ,即 for 循环应该是

{% for page_num in paginator.page_range %}

【讨论】:

    【解决方案2】:

    我遇到了同样的错误。有一个注释在 https://docs.djangoproject.com/en/dev/topics/pagination/

    在 Django 开发版本中进行了更改:以前,您需要使用 {% for contact in contacts.object_list %},因为 Page 对象不可迭代。

    所以{% for page in pages.object_list %} 可能会解决你的问题。

    【讨论】:

      【解决方案3】:

      pages 变量是页数,它是 int,因此错误:'int' object is not iterable

      你应该循环遍历page_range

      {% for page in page_range %}
      

      【讨论】:

        【解决方案4】:

        在您的错误行 #9 {% for page in pages %} pages 到底是什么

        在任何地方的代码中都看不到它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-20
          • 2021-07-04
          • 2021-02-04
          • 2020-02-28
          • 2013-05-07
          • 2019-07-25
          • 1970-01-01
          相关资源
          最近更新 更多