繁体   English   中英

如何在 django 模板中使用 pk 检查 object 是否存在?

[英]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=4Blog object ,那么pk=5Blogget_previous将是pk=3Blog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM