Django:从另一个视图获取上下文数据的正确方法

Django: proper way to get context data from another view

我有一个菜单,其内容是从视图中获取的,并且该菜单在每个视图中。是否有适当的方法将其上下文数据获取到我的所有视图,而无需在每个视图中再次编写相同的代码?

我正在考虑在另一个视图的 JsonResponse 上返回该上下文,并在每个模板中使用 JavaScript 像 API 一样解析它,但这是一个好习惯吗?

您可以利用 context processors [Django-doc] 将值传递给每个视图中的上下文。

您可以在任何应用程序中定义上下文处理器,例如在名为 app:

的应用程序中
# <i>app</i>/context_processors.py

def <b>menuitems</b>(request):
    return {
        'menuitems': ['item1', 'item2', 'item3']
    }

接下来可以在settings.py中注册上下文处理器:

# settings.py

# …

TEMPLATES = [
    {
        # …
        'OPTIONS': {
            'context_processors': [
                # …
                <b>'<i>app</i>.context_processors.menuitems'</b>
            ]
        }
        # …
    }
]

然后您可以在所有模板中使用 menuitems 变量:

<!-- <b>all</b> views -->
<ul>
{% for menuitem in menuitems %}
    <li>{{ menuitem }}</li>
{% endfor %}
</ul>