CBV细节视图将如何分页

时间:2013-09-09 02:54:36

标签: django pagination django-class-based-views

我有模特:

class Lesson(models.Model):
    title = models.CharField(max_length=200)
    lessoncontent = RichTextField()
    category = models.ForeignKey(CategoryLesson)

并查看:

class LessonDetailView(DetailView):
    model = Lesson
    paginate_by = 1
    template_name = 'lessons/lesson_detail.html'

还有ListView的列表课程

我如何将我的课程分页,如 - 的<<<上一课|下一课>>>

2 个答案:

答案 0 :(得分:1)

调用它的分页是你正在做的错误。对于每个位置,您希望能够根据某些条件导航到上一个和下一个位置。向Location模型添加两个方法 - 一个用于previous,一个用于next - 返回相应的条目。

请参阅Mezzanine cms中的此代码,该代码根据发布日期获得上一个和下一个 - https://github.com/stephenmcd/mezzanine/blob/master/mezzanine/core/models.py#L243

对应的模板代码 - https://github.com/stephenmcd/mezzanine/blob/master/mezzanine/blog/templates/blog/blog_post_detail.html#L91

{% block blog_post_previous_next %}
<ul class="pager">
{% with blog_post.get_previous_by_publish_date as previous %}
{% if previous %}
<li class="previous">
    <a href="{{ previous.get_absolute_url }}">&larr; {{ previous }}</a>
</li>
{% endif %}
{% endwith %}
{% with blog_post.get_next_by_publish_date as next %}
{% if next %}
<li class="next">
    <a href="{{ next.get_absolute_url }}">{{ next }} &rarr;</a>
</li>
{% endif %}
{% endwith %}
</ul>
{% endblock %}

答案 1 :(得分:0)

我认为最简单的方法是使用ListView而不是DetailView。