无法在base.html上渲染?

时间:2019-01-18 12:43:28

标签: django

我有一个base.html,它实质上为我的应用程序提供导航。

我希望能够在导航栏中添加一些统计信息-因此,我正在尝试将其呈现到base.html

如果我将base.html更改为home.html,则相同的脚本有效,但是我不想在每个页面上重复相同的代码,以在我离开家时保留统计信息。

这是我的观点:

def stats(request):
    incompletetasks = Todo.objects.filter(complete=False, creator=request.user).count()
    shared = Todo.objects.filter(Q(shareslotone=request.user) | Q(shareslottwo=request.user) | Q(shareslotthree=request.user) | Q(shareslotfour=request.user) | Q(shareslotfive=request.user)).count()
    closedtasks = Todo.objects.filter(complete=True, creator=request.user).count()
    context = {'incompletetasks':incompletetasks, 'shared':shared, 'closedtasks':closedtasks}
    return render(request, 'base.html', context)

如何将其渲染为base.html,而不是为每个页面复制相同的代码?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以为其使用模板标记

filters.py

register = template.Library()

 @register.filter(name="get_model_count")
 def get_model_count(model, app_label):
return apps.get_model(model_name=model, app_label=app_label).objects.count()

your_file.html

{% load filters %} #load it at the top of html file

<h2>{{ "your_model_name"|get_model_count:"your_app_name" }}</h2> #use this tag where you want to have count

注意:如果仅根据要求对一项进行修改,则此操作