在Django中如何按应用程序自动将变量添加到上下文中?
我想在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 %}
我考虑了以下几种方法:
- 在应用中声明一个变量(可以在视图里,或者在URL里),然后做一个上下文处理器。但我不太明白怎么从请求对象中提取这个变量。
- 在视图上加装饰器。嗯,我不太喜欢这个主意:代码太多,重复的部分也太多了。
- 第一种方法,但更好看:创建一些方法(像上面的例子那样),这些方法在服务器重启时执行,把数据写入一个字典里,然后某种方式(怎么做呢?)让上下文处理器获取应用名称并从字典中提取数据。我该把这个方法和字典放在哪里,上下文处理器又怎么知道视图对象在哪里呢?
1 个回答
2
你可以在上下文处理器里调用 resolve(request.path)
来解析当前的URL。想了解它返回的值,可以查看 Django文档中关于解析的部分,特别是 app_name
的内容。