Django;如何组织通用功能或类似模板

时间:2018-08-20 07:31:05

标签: python django django-templates django-views

我是初学者。我一直在从事Django项目。现在,我正在尝试创建通知部分,并获得了通知计数。

通知部分就像mypage一样。我的页面上有列表菜单,该部分很常见。现在,我想在mypage上显示计数,但是我想知道是否必须获得共同的上下文。

属于我的页面的页面上有一个共同的部分。 inbox.htmlmy_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):
  ...

我的问题是,基本上我必须记下在每个视图上调用该函数的过程吗?我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:1)

Django视图仅应返回特定于视图的数据作为模板的上下文(当然,对于使用模板的视图)。要在模板的上下文中注入“公共”数据,有两种主要解决方案:context processorcustom templatetag

将为每个模板(几乎是文档,请参阅文档)调用上下文处理器,因此最好保留它们以获取“廉价”且对于所有视图确实有用的数据(典型示例是{{ 1}}和auth处理器)。

对于成本较高且只能在某些模板中使用的数据,您宁愿使用自定义templatetag,这就是我在这里使用的。不用担心文档,编写这样的自定义模板标签真的很容易using an inclusion_tag

答案 1 :(得分:0)

在视图外部或其他文件中写入函数,然后将其导入。然后按视图调用函数?

创建一个文件“ my_view_funcs.py”并编写函数。然后将文件导入“ views.py”并调用get_number_of_notifications(self)