【问题标题】:I have problems with setting up django-pagination我在设置 django-pagination 时遇到问题
【发布时间】:2013-06-29 22:08:59
【问题描述】:

我正在为 Django 网站制作一个模板(它是报价数据库)。我想要类似 Digg 的分页。尽管如此,该应用程序的作者已经进行了自己的分页,不幸的是没有页面编号(只是“上一个”和“下一个”链接)。所以我已经安装了 django-pagination,但我不能在网站上使用它。我是 Django 的新手,甚至编程 - 我只是一个简单的网页设计师......好吧,我们开始吧。

有原脚本:https://bitbucket.org/fleg/fqdb/

首先是模板上下文处理器的问题。我的 settings.py 没有这个部分,所以我添加它就像在 django-pagination 文档中一样。当我运行该站点时,我收到一个错误:“将 'django.contrib.auth.context_processors.auth' 放入您的 TEMPLATE_CONTEXT_PROCESSORS 设置中,以便使用管理应用程序”。那我要怎么点呢?

第二个问题是模板。我在the screencast 上使用它完全:

{% 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:请求”。但是……说真的,我不知道这段代码有什么问题!

有分页视图-报价列表。它无需分页即可工作,所以我认为这不是问题,但也许。

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 上找到原始视图。

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

【问题讨论】:

  • 你能发布呈现该模板的视图吗?
  • 如果你想拥有digg风格的分页django-endless-pagination可能值得一试!

标签: python django pagination django-pagination


【解决方案1】:

您似乎需要将django.contrib.auth.context_processors.auth 和django.core.context_processors.request 上下文处理器添加到您的TEMPLATE_CONTEXT_PROCESSORS 设置中。

在定义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 request context docs 中给出的默认列表,添加了请求处理器,并注释掉了您似乎不需要的那些。

模板上下文处理器的顺序通常无关紧要,只要它们不定义重叠的变量名。

【讨论】:

  • 哥们,你也解决了我的问题!赞个男人! +1!!!我已经被困了一个小时。顺便说一句,虽然分页有效,但没有下一个或上一个按钮?
  • 我很高兴答案有所帮助,但它已经有几年了。你最好问一个关于上一个和下一个按钮的新问题。
【解决方案2】:

如果对象是从模板标签传递的

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']

【讨论】:

    【解决方案3】:
    {% autopaginate quotes N%}
    

    N - 每页需要多少个项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2011-04-01
      • 2023-03-22
      • 2021-08-10
      • 1970-01-01
      • 2019-11-01
      • 2021-06-19
      相关资源
      最近更新 更多