不了解何时/为何使用自定义模板标签

时间:2019-12-19 17:58:40

标签: django django-templates django-views

我正在读一本关于Django的书,它让我创建了以下自定义标签(这是一个博客项目):

from django import template
from .. models import Post


register = template.Library()

@register.simple_tag 
def total_posts():
    return Post.published.count()

请注意,我的数据库中保存了4个Post对象,所以现在在模板中,我可以这样说:

{% load blog_tags %}
<p>This is my blog. I've written {% total_posts %} posts so far.</p>

,它将返回: “这是我的博客。到目前为止,我已经写了4篇文章。”我只是不明白为什么我会尝试使用自定义模板标记来实现这一目标。为什么不只计算视图中的Post对象的数量,然后使用上下文变量将其传递给模板?即:

from .models import Post
def index(request):
 numPosts = Post.objects.count()
 return render(request, 'index.html', {'numPosts': numPosts})

在此先感谢您的答复。

1 个答案:

答案 0 :(得分:0)

这是一个非常基本的示例,向您展示如何编写海关标签。

对于total_posts(以及许多其他情况),您可以将对象上下文从视图传递到模板,但可以想象一下,要计算total_posts,您需要进行大量查询,因为...写了很多代码,您需要在其他一些模板中使用total_posts值。最简单的方法是编写一个自定义标签,您将拥有更清晰的视图,并且重复的代码也更少了。