[英]How to check existence of an object using pk in django template?
我尝试了这个if condition
,仅当它存在于数据库中时才显示上一个和下一个帖子。
{% if blog.pk|add:-1 %}
<a href="{% url 'blog:blogdetail' blog.pk|add:-1 %}">Previous Post</a>
{% endif %}
{% if blog.pk|add:1 %}
<a href="{% url 'blog:blogdetail' blog.pk|add:1 %}">Next Post</a>
{% endif %}
但是,它有点忽略了这个条件,并且总是显示下一个和上一个帖子按钮,因为这个条件是错误的。 我该如何解决?
请不要在模板中实现它。 模板应该用于呈现逻辑,而不是业务逻辑。
例如,您可以在Post
object 上定义一个方法来获取上一项和下一项:
class Blog(models.Model):
# …
def get_next(self):
return Blog.objects.filter(pk__gt=self.pk).order_by('pk').first()
def get_previous(self):
return Blog.objects.filter(pk__lt=self.pk).order_by('-pk').first()
然后,您可以使用这些方法:
{% with prev_blog=blog.get_previous %}
{% if prev_blog %}
<a href="{% url 'blog:blogdetail' prev_blog.pk %}">Previous Post</a>
{% endif %}
{% endwith %}
{% with next_blog=blog.get_next %}
{% if next_blog %}
<a href="{% url 'blog:blogdetail' next_blog.pk %}">Next Post</a>
{% endif %}
{% endwith %}
如果存在“间隙”,这也将获取Blog
对象。 因此,如果没有pk=4
的Blog
object ,那么pk=5
的Blog
的get_previous
将是pk=3
的Blog
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.