我是如何学习 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