Django Pagination KeyError' source'

时间:2014-04-08 20:19:10

标签: python django pagination

我安装了来自:https://github.com/jmcclell/django-bootstrap-pagination的Django模板分页标记,当我按照所有说明操作时,我收到了'源'错误。

显然我做错了。

===========================================

编辑3

SETTINGS.py

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.request",
)

VIEW.py:

def pagination(request):
location = Location.objects.all()
return render_to_response('pagination.html',
                      location,
                      context_instance=RequestContext(request))

TEMPLATE

{% load bootstrap_pagination %}

<h1>Location</h1>
{% for location in location %}
<h2>{{ location.name }}</h2>
{% endfor %}

{% bootstrap_paginate location %}

错误:

AttributeError at /pagination/

'str' object has no attribute 'paginator'

Request Method: GET
Request URL:    http://127.0.0.1:8000/pagination/
Django Version: 1.5.4
Exception Type: AttributeError
Exception Value:    
'str' object has no attribute 'paginator'

模板渲染时出错

In template /home/jr/Documents/python/amapp/sdr/article/templates/pagination.html, error     at line 7
'str' object has no attribute 'paginator'
1   {% load bootstrap_pagination %}
2   
3   
4   
5   
6   
7   {% bootstrap_paginate location %}

3 个答案:

答案 0 :(得分:1)

我是图书馆的作者,但是你必须原谅我,因为我已经很长一段时间没有使用过Python,而且我的核心大部分都是关于这个库的知识。

所以,@ WayBehind是正确的,你的第一个错误是使用&#34; page_obj&#34;。这只是一个例子。在您的情况下,您想使用&#34; location&#34;

然而,你从来没有看到过这个错误,因为你有一个更紧迫的错误,即图书馆不适合你的设置。我用Python 2.7用请求上下文预处理器编写了这个库。请仔细检查您是否已根据文档启用了上下文预处理器,请确保您使用的是Python&lt; 3.0。我知道这个库目前没有3.x.有一个图书馆的分支,其他一些人一直在努力解决这个问题,我正在积极关注它,以便在准备就绪时将这些变化拉出来,但截至目前它只是不起作用。

如果您使用的是Python 2.x并且启用了请求上下文预处理器,我不确定您为什么会收到该错误。如果你能确认这两件事是真的,我很乐意明天再仔细看看。

编辑:

这可能是也可能不是问题,但我注意到您使用实例的相同变量名称遍历您的Location对象:

{% for location in location %}
<h2>{{ location.name }}</h2>
{% endfor %}

{% bootstrap_paginate location %}

Django的模板范围是否可能使您传递给bootstra_paginate的对象是&#34; location&#34;的最后一个实例。而不是整套?这是对袖口猜测的第一次尝试,因为否则事情似乎是正确的。

答案 1 :(得分:0)

您是否遵循了所有步骤?

请求在context_processor(settings.py)中?

TEMPLATE_CONTEXT_PROCESSORS = (
    ....
    "django.core.context_processors.request",
    ....
)

您在模板中使用obj_list,但obj_list中有什么内容吗?也许你必须使用&#34; location&#34;而不是&#34; obj_list&#34; ?因为我认为您的对象列表位于位置(位置对象)内,但您正在使用示例中的obj_list。在示例中,obj_list只是对象列表的变量示例。

修改 改变这个:

def pagination(request):
    args = {}
    args.update(csrf(request))
    args['location'] = Location.objects.all()
    return render_to_response('pagination.html', args)

为此:

from django.template import RequestContext
    def pagination(request):    
        location = Location.objects.all()
        return render_to_response('pagination.html', 'location':location,context_instance=RequestContext(request))

答案 2 :(得分:0)

使用page_obj为我工作,对于任何想知道为什么在使用 Django 2.0.2 django-bootstrap4 0.0.6 时这不起作用的人。

我通过挖掘从Django的DEBUG模式出现的错误消息中的上下文变量来看到这一点。