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