Python 如何在django模板中使用pk检查对象的存在性?
我尝试了这个Python 如何在django模板中使用pk检查对象的存在性?,python,django,Python,Django,我尝试了这个if条件,仅当它存在于数据库中时才显示上一篇和下一篇文章 {% 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
if条件
,仅当它存在于数据库中时才显示上一篇和下一篇文章
{% 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 %}
{%if blog.pk | add:-1%}
{%endif%}
{%if blog.pk | add:1%}
{%endif%}
但是,它有点忽略了这个条件,总是显示下一个和上一个帖子按钮,因为这个条件是错误的。如何修复此问题?请不要在模板中实现此功能。模板应该用于呈现逻辑,而不是业务逻辑
例如,您可以在Post
对象上定义一个方法,以获取上一项和下一项:
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()
类博客(models.Model):
# …
def get_next(自我):
返回Blog.objects.filter(pk\u gt=self.pk).order\u by('pk').first()
def get_previous(自我):
返回Blog.objects.filter(pk\u lt=self.pk).order\u 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 %}
{%with prev_blog=blog.get_previous%}
{%if-prev_blog%}
{%endif%}
{%endwith%}
{%with next_blog=blog.get_next%}
{%if next_blog%}
{%endif%}
{%endwith%}
如果存在“间隙”,这也将获取
Blog
对象。因此,如果没有具有pk=4
的Blog
对象,则具有pk=5
的Blog
的get_previous
将是具有pk=3
的Blog
请不要在模板中执行此操作。在模板中编写业务逻辑不是一个好主意。谢谢,任何解决方案。如何在视图中执行并在模板中传递我认为剩下的唯一选项是创建两个外键字段引用同一个模型,并手动告诉哪些是上一篇和下一篇文章。谢谢您,先生,您一直在那里,我们对此表示感谢,这正是我所需要的。