在Django中如何按应用程序自动将变量添加到上下文中?

2 投票
1 回答
717 浏览
提问于 2025-04-16 05:36

我想在Django中添加一个上下文变量,这样我就可以为每个应用单独定义它的值,或者让它保持空白。

举个例子:

apps/someapp/views.py:

def_context_var('app_name', 'Calendar')

templates/base.html:

{% if app_name %}You are in {{ app_name }} app.{% endif %}
....
{% if app_name %}Subsections of {{ app_name }}: ...{% endif %}

我考虑了以下几种方法:

  1. 在应用中声明一个变量(可以在视图里,或者在URL里),然后做一个上下文处理器。但我不太明白怎么从请求对象中提取这个变量。
  2. 在视图上加装饰器。嗯,我不太喜欢这个主意:代码太多,重复的部分也太多了。
  3. 第一种方法,但更好看:创建一些方法(像上面的例子那样),这些方法在服务器重启时执行,把数据写入一个字典里,然后某种方式(怎么做呢?)让上下文处理器获取应用名称并从字典中提取数据。我该把这个方法和字典放在哪里,上下文处理器又怎么知道视图对象在哪里呢?

1 个回答

2

你可以在上下文处理器里调用 resolve(request.path) 来解析当前的URL。想了解它返回的值,可以查看 Django文档中关于解析的部分,特别是 app_name 的内容。

撰写回答