Django分页和"当前的一页"
-
09-09-2019 - |
题
我目前正在开发一个Django应用程序,它将使用的臭名昭着的"分页的"技术。我试图找出如何django。核心。分页模块的工作。
我有一个应用程序的一个问题的模式。我将列出所有的问题使用这种分页.会有20个问题的每页。
def show_question(question_pk):
questions = Question.objects.all()
paginator = Paginator(questions, 20)
page = ... # Somehow figure out which page the question is on
return render_to_response('show_question.html', { 'page' : page })
在图,其中列出不同的网页为"...2,3, 4,5,6,..."我想要强调目前页,不知怎的,就像许多网页做。
真的有两件事情我想知道:
- 我怎么做Django找出哪些页面的问题是位于?
- 我怎么写我的模板的正常"强调"当前访问的页面?
编辑:对不起,我忘了一部分这个问题。我还想任何网页除了目前的一个链接到 /questions/{{ that_page.start_index }}
.所以基本上每一页的链接将链接到第一个问题。
解决方案
嗯...我看到你的意见你就不想要做ol'获得的参数,这是什么django。核心。分页写使用。做你想要什么,我可以认为没有更好的办法,而不是预先计算的网页,每个问题。作为一个例子,你的看法将最终被东西,如:
ITEMS_PER_PAGE = 20
def show_question(question_pk):
questions = Question.objects.all()
for index, question in enumerate(questions):
question.page = ((index - 1) / ITEMS_PER_PAGE) + 1
paginator = Paginator(questions, ITEMS_PER_PAGE)
page = paginator.page(questions.get(pk=question_pk).page)
return render_to_response('show_question.html', { 'page' : page })
突出的当前一页模板,你会喜欢的东西
{% for i in page.paginator.page_range %}
{% ifequal i page.number %}
<!-- Do something special for this page -->
{% else %}
<!-- All the other pages -->
{% endifequal %}
{% endfor %}
作为该项目,只有两个不同的object_lists工作。
page.object_list
将该物体在当前页
page.paginator.object_list
将所有对象,无论页。每一个这些项目将有一个"网页"可变的,会告诉你哪一页他们。
所有的说,你在做什么声音非常规。你可能需要重新思考,但无论哪种方式,良好的运气。
其他提示
Django, 至少 从1.2版,使我们能够完成这项任务通过使用纯默认页模板的标签。
{% for page in article_list.paginator.page_range %}
{% if page == article_list.number %}
{{ page }}
{% else %}
<a href="/page{{ page }}">{{ page }}</a>
{% endif %}
{% endfor %}
在article_list是实例
paginator = Paginator(article_list, 20)
try:
article_list = paginator.page(int(page))
except (EmptyPage, InvalidPage):
article_list = paginator.page(paginator.num_pages)
django页 应该做什么你想要来的包裹在一个漂亮的包你可以插和使用。它基本上移动代码从你的意见的模板和中间件。
编辑:我刚看见你的编辑。你可以获得目前的对象在一个页面上使用 {% autopaginate object_list %}
, 代替 object_list
与目前的对象对于任何给定的一页。你可以迭代过它,如果你想要的首先,你应该能把它像一个列表,并做 object_list[0]
.
如果你要保持这个在你的看法,你可以做像这样的东西:
def show_question(question_pk):
questions = Question.objects.all()
paginator = Paginator(questions, 20)
return render_to_response('show_question.html', { 'page' : paginator })
在你的模板,可以访问的当前一页你在通过这样做:
# Gives you the starting index for that page.
# For example, 5 objects, and you're on the second page.
# start_index will be 3.
page.start_index
# You can access the current page number with:
# 1-based index
page.number
那你应该可以做一切你需要的。有几个很好的例子 在这里,.