我目前正在开发一个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,..."我想要强调目前页,不知怎的,就像许多网页做。

真的有两件事情我想知道:

  1. 我怎么做Django找出哪些页面的问题是位于?
  2. 我怎么写我的模板的正常"强调"当前访问的页面?

编辑:对不起,我忘了一部分这个问题。我还想任何网页除了目前的一个链接到 /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

那你应该可以做一切你需要的。有几个很好的例子 在这里,.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top