我在设置django-pagination时遇到问题

1 投票
3 回答
2636 浏览
提问于 2025-04-17 04:02

我正在为Django网站制作一个模板(这是一个引用数据库)。我想要一种类似Digg的网站分页方式。虽然这个应用的作者做了自己的分页,但可惜的是没有页码(只有“上一页”和“下一页”的链接)。所以我安装了django-pagination,但我无法在网站上使用它。我对Django完全是新手,甚至对编程也不太了解——我只是一个普通的网页设计师……好吧,开始吧。

这是原始的脚本: https://bitbucket.org/fleg/fqdb/

第一个问题是关于模板上下文处理器。我在settings.py文件中没有这个部分,所以我按照django-pagination文档的说明添加了它。当我运行网站时,出现了一个错误:“在你的TEMPLATE_CONTEXT_PROCESSORS设置中放入'django.contrib.auth.context_processors.auth'以使用管理应用”。那么我该怎么设置呢?

第二个问题是模板。我使用的代码和这个视频教程中完全一样:

{% extends "fqdb/base.html" %}
{% load pagination_tags %}

{% block title %}{{ title }}{% endblock %}

{% block content %}
            <h1>{{ title }}</h1>

            {% if quotes %}
            {% autopaginate quotes %}
            {% for quote in quotes %}
                {% include 'fqdb/quote_body.html' %}
            {% endfor %}
            {% paginate %}
            {% else %}
                <p>Brak cytatów.</p>
            {% endif %}
{% endblock %}

但是我得到的错误是“模板错误:渲染时捕获到KeyError:request”。但是……说真的,我不知道这个代码哪里出错了!

这是分页后的视图——引用列表。它在没有分页的情况下可以正常工作,所以我不认为这是问题,但也许是。

def list_paged(request, page, order_by_what, title, reverse_name):
hash = get_ip_hash(request)
lista = Quote.objects.filter(accepted = True).order_by(order_by_what)[:]
    returnDict = {'quotes': lista, 'title': title, 'hash': hash, 'sidebar': get_sidebar()}
    return render_to_response('fqdb/quote_list.html', {'quotes': get_quotes(quotes)},     context_instance=RequestContext(request))

我已经修改了它,不进行分页,因为这是django-pagination的任务。你可以在Bitbucket上找到原始视图。

也许你知道一些更好的分页解决方案?

3 个回答

-1
{% autopaginate quotes N%}

N - 每一页需要多少个项目

0

如果对象是从一个模板标签传递过来的

def comment_app(context):
    objects = Comments.objects.get_tree_for_object(context['content_object'])
    return {
        'comments_tree': objects,
        'request': context['request']
}
register.inclusion_tag('comments/comment_app.html', takes_context=True)(comment_app)

注意:'request': context['request']

5

看起来你需要在你的设置中添加 django.contrib.auth.context_processors.authdjango.core.context_processors.request 这两个上下文处理器。

在你定义 TEMPLATE_CONTEXT_PROCESSORS 之前,Django 会使用默认的设置。看起来你的一些代码需要 auth 处理器,这就是你第一个错误信息的原因。

KeyError 的错误提示让我觉得你需要 request 处理器。

试试在你的设置文件中添加以下内容:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    #"django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    #"django.core.context_processors.static",
    #"django.contrib.messages.context_processors.messages")
    "django.core.context_processors.request"
    )

我使用了 Django 1.3 的默认列表,参考了 请求上下文文档,添加了请求处理器,并注释掉了那些你似乎不需要的处理器。

模板上下文处理器的顺序通常不重要,只要它们没有定义重复的变量名就可以。

撰写回答