【问题标题】:Django; How to organize common functions or similar templates姜戈;如何组织常用功能或类似模板
【发布时间】:2019-01-26 07:11:57
【问题描述】:

我是初学者。我一直在做 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):
  ...

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

【问题讨论】:

标签: python django django-templates django-views


【解决方案1】:

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

将为每个模板调用上下文处理器(几乎,参见文档),因此最好将它们保留用于“便宜”获取且对所有视图都非常有用的数据(典型示例是 @987654324 @ 和 i18n 处理器)。

对于成本较高且可能仅在某些模板中使用的数据,您宁愿使用自定义模板标签,这就是我将在这里使用的。不要被文档吓到,像这样写一个自定义模板标签真的很容易using an inclusion_tag

【讨论】:

  • 非常感谢。这似乎对我有帮助。
【解决方案2】:

在视图之外编写函数,或者在另一个文件中并导入它。然后按视图调用函数?

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

【讨论】:

  • 那么实际上我必须为每个视图调用相同的函数吗?
  • @ani 不,绝对 - Django 并不是那么愚蠢,这个问题对所有项目都很常见,所以当然有更好的解决方案,参见我的回答。
猜你喜欢
  • 2011-05-13
  • 2021-08-11
  • 2011-01-27
  • 2019-07-12
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
相关资源
最近更新 更多