我正在读一本关于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})
在此先感谢您的答复。
答案 0 :(得分:0)
这是一个非常基本的示例,向您展示如何编写海关标签。
对于total_posts
(以及许多其他情况),您可以将对象上下文从视图传递到模板,但可以想象一下,要计算total_posts
,您需要进行大量查询,因为...写了很多代码,您需要在其他一些模板中使用total_posts
值。最简单的方法是编写一个自定义标签,您将拥有更清晰的视图,并且重复的代码也更少了。