我是初学者。我一直在从事Django项目。现在,我正在尝试创建通知部分,并获得了通知计数。
通知部分就像mypage一样。我的页面上有列表菜单,该部分很常见。现在,我想在mypage上显示计数,但是我想知道是否必须获得共同的上下文。
属于我的页面的页面上有一个共同的部分。
inbox.html
,my_profile.html
等
<div class="list-group">
<a href="#">
My page top
</a>
<a href="#">
Inbox
<span class="badge badge-primary badge-pill">{{ this is the count of notifications }}</span>
</a>
获取通知计数的功能是这样的
def get_number_of_notifications(self):
notifications = Message.objects.filter(message_to=request.user, is_read=False).count()
return notifications
在views.py
中就像
def mypage_top(request):
...
def my_profile(request):
...
def inbox(request):
...
我的问题是,基本上我必须记下在每个视图上调用该函数的过程吗?我想知道是否有更好的方法。
答案 0 :(得分:1)
Django视图仅应返回特定于视图的数据作为模板的上下文(当然,对于使用模板的视图)。要在模板的上下文中注入“公共”数据,有两种主要解决方案:context processor或custom templatetag。
将为每个模板(几乎是文档,请参阅文档)调用上下文处理器,因此最好保留它们以获取“廉价”且对于所有视图确实有用的数据(典型示例是{{ 1}}和auth
处理器)。
对于成本较高且只能在某些模板中使用的数据,您宁愿使用自定义templatetag,这就是我在这里使用的。不用担心文档,编写这样的自定义模板标签真的很容易using an inclusion_tag
。
答案 1 :(得分:0)
在视图外部或其他文件中写入函数,然后将其导入。然后按视图调用函数?
创建一个文件“ my_view_funcs.py”并编写函数。然后将文件导入“ views.py”并调用get_number_of_notifications(self)