我正在为Django网站(它的报价数据库)制作模板。我想要像Digg一样的分页。 Altough,该应用程序的作者已经做了自己的分页,遗憾的是没有页面数字(只是“上一个”和“下一个”链接)。所以我已经安装了django-pagination,但我不能在网站上使用它。我是Django的新手,甚至编程 - 我只是一个简单的webdesigner ......好的,我们走了。
有原始脚本:https://bitbucket.org/fleg/fqdb/
第一件事是模板上下文处理器的问题。我的settings.py没有这个部分,所以我添加它就像在django-pagination文档中一样。当我运行该站点时,我收到一个错误:“在您的TEMPLATE_CONTEXT_PROCESSORS设置中输入'django.contrib.auth.context_processors.auth'以使用管理应用程序”。那我该如何订购?
第二个问题是模板。我在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找到原始视图。
也许你知道一些更好的分页解决方案吗?
答案 0 :(得分:5)
您似乎需要在TEMPLATE_CONTEXT_PROCESSORS
设置中添加django.contrib.auth.context_processors.auth
和django.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 request context docs中给出的默认列表,添加了请求处理器,并注释掉了您似乎不需要的那些。
模板上下文处理器的顺序通常并不重要,只要它们不定义重叠的变量名称。
答案 1 :(得分: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)
请注意:'requestcontext ['request']
答案 2 :(得分:-1)
{% autopaginate quotes N%}
N
- 每页需要多少项