我是如何学习 Django Context Processors 的
我正在使用 Django 构建一个在线饰品商店。
我构建了一个导航栏来显示产品分类。起初,我将分类进行了硬编码。这在一段时间内是有效的。
随后我发现了一个问题。如果我添加一个新分类,就必须手动更新导航栏。这非常低效。
我的第一个想法是通过 view 中的 context 传递分类。但我很快发现了第二个问题。每个页面都需要导航栏,这意味着我必须在每一个 view 中重复相同的代码。这会导致代码变得混乱。
我找到了一个更好的方法:Django Context Processors。
Context processors 可以让数据在所有模板中可用。你不需要从每个 view 中传递数据。
使用 Context processors 处理:
- 导航分类
- 网站设置
- 用户通知
- 购物车数据
Context processor 是一个 Python 函数。它接收一个 request 对象并返回一个字典。
Example:
def custom_context(request): return { "custom_value": "hello from context processors" }
你必须在 settings 中注册该函数。将其添加到 TEMPLATES 设置中的 context_processors 列表中。
Example:
'OPTIONS': { 'context_processors': [ 'myapp.context_processors.custom_context', ], },
现在,你可以像这样在模板中使用数据:
{{ custom_value }}
这解决了我的问题。我的导航栏现在可以在每个页面自动获取分类数据。我不再需要重复编写代码。
开发功能的过程往往会让你学到新的概念。对我来说,这次学到的是 Context Processors。
Source: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h