Django-Pagination错误

时间:2012-05-11 12:00:01

标签: python django

我正在使用django-pagination软件包以tweety的方式对用户推文进行分页。在完成所有必要的指令后,分页似乎不起作用。我想我错过了一些东西。不知道要使用哪个变量来替换“object_list”。我怎样才能让它成为分页?

错误:

       TemplateSyntaxError at /test/

       Caught VariableDoesNotExist while rendering: Failed lookup for key [object_list] in u'<tweepy.cursor.ItemIterator object at 0x0437DC10>'

        Request Method:     GET
        Request URL:    http://127.0.0.1:8000/test/
        Django Version:     1.3.1
        Exception Type:     TemplateSyntaxError
        Exception Value:    

      Caught VariableDoesNotExist while rendering: Failed lookup for key [object_list] in u'<tweepy.cursor.ItemIterator object at 0x0437DC10>'

       Exception Location:  C:\Python27\lib\site-packages\django\template\base.py in _resolve_lookup, line 692
       Python Executable:   C:\Python27\python.exe
       Python Version:  2.7.2

模板:

     {% extends "base.html" %}

     {% load pagination_tags %} 

       {% block content %}

        {% autopaginate treats.object_list 10 %} 

          {% for treat in treats %}  

              <center> <p>  {{ treat.author.screen_name}} </p>
         <p>  {{ treat.text|safe }}  {{ treat.url }} </p>
         <p> {{ treat.created_at }}  Via: {{treat.source}} </p> </center>

         {% empty %} 

            <p> Sorry, No Update Could Be Loaded At This Time. </p>
        {% endfor %} 

         {% paginate %} 
          {% endblock %}

查看:

   def testdat(request):
       if request.method=="GET":
          treats=Cursor(api.list_timeline, owner=request.user, slug="").items(20)
          for treat in treats:
              treat.__getstate__()
              top=Twet(text= treat.text, author_screen_name= treat.author.screen_name, created_at= treat.created_at, source= treat.source)
              top.save()
          treats=Cursor(api.list_timeline, owner=request.user, slug='').items(20)
          return render_to_response('dashy.html',{'treats': treats},context_instance=Requ

3 个答案:

答案 0 :(得分:1)

基本问题是,传递给paginate标记的内容不是可迭代的(如列表或查询集),因此无法单步执行分页。

您可以通过修改返回return render_to_response('dashy.html',{'treats': list(treats)}

来解决此问题

但是,tweepy已包含pagination,因此您可以立即使用它。您的treats对象具有以下可以使用的方法.next().prev().current_page().count().page_iterator().page_index()直接实施分页。

请参阅this link,了解ItemIterator公开的所有方法的图表。

答案 1 :(得分:0)

尝试:

    {% autopaginate treats 10 %} 

查询集(我认为对待)默认情况下不包含对象列表

答案 2 :(得分:0)

我假设您的Python代码使用iterator()来返回QuerySet,在这种情况下这是有意义的,因为查询集是可迭代的但没有长度。也许你应该从返回条件的代码中删除iterator(),如果它存在,或者至少做一个简单的查询。

treats = Treat.objects.filter(price__gt=100)
...
return {'treats':treats}

然后你的模板是错误的,正如Krzystof所说,只是做

{% autopaginate treats 10 %}

因为我认为当你在yout模板中循环处理时,你必须对完全相同的可迭代变量进行分页。