【发布时间】:2020-02-19 01:13:17
【问题描述】:
我有以下模型(简化):
class Post(models.Model):
title = models.CharField(max_length=20)
date_created = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('-date_created',) # note the "reverse" ordering here
,然后是我基于generic.DetailView的自定义DetailView:
class PostDetailView(generic.DetailView):
queryset = Post.objects.all()
最后是以下模板:
{% with object.get_previous_by_date_created as prev %}
{% if prev %}
<a class="nav-link-prev"
href="{% url "blog:post_detail" pk=prev.id %}">Previous</a>
{% endif %}
{% endwith %}
{% with object.get_next_by_date_created as next %}
{% if next %}
<a class="nav-link-next"
href="{% url "blog:post_detail" pk=next.id %}">Next</a>
{% endif %}
{% endwith %}
我以这种方式实现的分页工作,但由于反向排序(即-date_created)字段,其上一个/下一个标签放错了位置。换句话说,我的模板输出“上一个”应该是“下一个”,反之亦然。如果我删除 - 登录 ordering = ('-date_created',) 它将正常工作,但这不是我希望在我的网站上的顺序。
是否有一种简单而惯用的方法来解决这种不当行为?我错过了什么?
【问题讨论】:
-
所以只更改了标签(下一个 | 上一个),否则可以正常工作?
-
@HoratiuJeflea 所有链接 HTML。
-
您能否将
order_by添加到您的queryset中,例如queryset = Post.objects.all().order_by('-date_created')并检查您的输出。 -
@MKPatel 尝试了您的方法。我没有看到任何变化。
-
作为 hack,我可能会使用
{% with object.get_next_by_date_created as prev %}和{% with object.get_previous_by_date_created as next %}但它很难看。
标签: django pagination