base.html用作所有其他页面的基本模板.base.html有导航栏,在导航栏中,我想显示用户收到的消息数.因此,我需要一个变量,比如base.html中的{{number_of_messages}}.

但是,我应该如何将此变量传递给它呢?每个模板扩展base.html个,并由一个函数呈现.我不认为在所有函数中都返回number_of_messages是一个好方法.有没有更好的方法来实现这一点?如何将此变量传递给所有模板?

推荐答案

Have a look at:
https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.RequestContext

只要:

  • 您可以在视图中使用render快捷键(否则请注意使用RequestContext来呈现响应)
  • 在您的TEMPLATE_CONTEXT_PROCESSORS设置中有django.contrib.auth.context_processors.auth(as it is by default)

.那么您的模板中有当前请求的User(或AnonymousUser)个实例作为{{ user }}可用…我猜您可以从那里直接访问消息的数量?

或者你用的是Django的messages framework

它带有自己的上下文处理器(只要您使用renderRequestContext),它将在您的模板中提供{{ messages }}var(包含当前用户的消息).对于"消息数量",您可以 Select {{ messages|length }}

如果这些内置选项都不能满足您的需求,您可以:

  • make your own template context processor,它将 for each 请求运行,并为all模板提供额外的变量(当使用RequestContext呈现时)

  • make your own template tag,只能在需要的地方使用.当然,如果这是在base.html中使用的,并且所有模板都继承自base.html,那么它仍然会在每个页面上运行.

Django相关问答推荐

如何在Django REST框架中使用FactoryBoy创建不同的项目

如何从列中捕获数据并将其添加到下拉菜单中,以便表单填充另一个表

Django中每个类型/代理的最新行

使用自定义的AuthBackend时,无法使用request.user.is_authenticated或@login_required修饰符

如果字段为空,则 Unique_together 不起作用.怎么约束呢?

django.template.response.ContentNotRenderedError: 必须渲染响应内容才能迭代

当从 fastapi 发送请求时,Django 无法对 Postgres 执行查询

有谁知道是否可以将您的 Django Heroku 应用程序放到 App Store/Google Play 上?

为什么在 Docker 映像中运行我的 Django 应用程序后下载属性不再起作用?

Django 独立脚本

将网络测功机添加到 Heroku django 应用程序时如何克服Coudn't find that formation错误?

如何在 django 模板中将名称反转为绝对 url?

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

Django rest-auth allauth 注册,带有邮箱、名字和姓氏,没有用户名

如何使用基于类的视图处理表单(通过 get 或 post)?

django 管理列表中的外键显示

Django manage.py:在其依赖之前应用迁移

在 django admin 中链接到外键对象

javascript 文件中的 Django {% static 'path' %}

ValueError: 无法解析相关模型 u'app.model'