Django分页KeyError 'source

0 投票
3 回答
1979 浏览
提问于 2025-04-18 01:55

我从这个链接安装了Django的模板分页标签:https://github.com/jmcclell/django-bootstrap-pagination,虽然我按照所有的说明操作,但我遇到了“源”错误。

显然我做错了什么。

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

编辑 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

使用 page_obj 对我来说是有效的,想知道为什么在使用 Django 2.0.2django-bootstrap4 0.0.6 时这不管用的人可以看看。

我是在查看Django的DEBUG模式下出现的错误信息中的上下文变量时发现这个问题的。

0

你有没有按照所有步骤来做呢?

请求是在 context_processor(settings.py)里面吗?

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

你在模板中使用了 obj_list,但 obj_list 里面有东西吗?也许你应该用“location”而不是“obj_list”呢?因为我觉得你的对象列表是在 location 里面(Location 对象),但你却像例子那样使用 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

我是这个库的作者,不过请原谅我,因为我有一段时间没用Python了,关于这个库的知识也几乎忘光了。

所以,@WayBehind说得对,你的第一个错误是使用了“page_obj”。那只是个例子。在你的情况下,你应该用“location”。

不过,你并没有看到那个错误,因为你遇到了一个更严重的问题,就是这个库和你的环境不兼容。我是在Python 2.7下写的这个库,并且使用了请求上下文预处理器。请仔细检查一下你是否按照文档启用了上下文预处理器,并确保你使用的是Python <3.0。我知道这个库在3.x版本上是无法工作的。目前有一个分支,其他人正在努力修复这个问题,我也在关注这个分支,准备在合适的时候把那些改动合并进来,但现在它就是不行。

如果你使用的是Python 2.x,并且启用了请求上下文预处理器,我不太明白你为什么会出现那个错误。如果你能确认这两点是正确的,我明天很乐意再仔细看看。

编辑:

这可能是个问题,也可能不是,但我注意到你在循环遍历你的Location对象时,使用了相同的变量名:

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

{% bootstrap_paginate location %}

有可能Django的模板作用域导致你传给bootstra_paginate的对象是“location”的最后一个实例,而不是整个集合吗?这是我随便猜的第一步,因为其他地方看起来都是对的。

撰写回答