我有一个动态菜单,包含在多个模板中。 (侧边栏.html)
<div class="sidebar">
<h3>Service Menu</h3>
<ul>
<li><a href="{% url 'service:showrooms' %}">Showroom</a></li>
{% for link in major_sites %}
<li><a href="{% url 'service:majorsite' link.id %}">{{ link.location }}</a></li>
{% endfor %}
</ul>
</div>
在我看来,我会得到类似的数据
def index(request):
model_urls = MajorSiteInfoData.objects.only('location')
return render(request, 'service/index.html', {
'link': model_urls,
})
但是我在这个应用程序中有大约 9 个 View ,它们都需要这个菜单,我如何重用数据而不是为每个 View 查询 9 次?
谢谢
最佳答案
在应用的目录中创建文件 context_processors.py
。在那里,创建一个类似的函数
def add_sidebar_stuff(request):
model_urls = MajorSiteInfoData.objects.only('location')
return {
'link_urls': model_urls,
}
并将其加载到settings.py
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
...
'OPTIONS': {
'context_processors': [
...
'my_app.context_processors.add_sidebar_stuff',
...
上面将变量添加到每个模板上下文。该部分可能是必要的,也可能不是必要的,我不知道您是否已经在其他地方加载了变量。
然后创建一个部分模板partial_menu.html
<ul>
<li><a href="{% url 'service:showrooms' %}">Showroom</a></li>
{% for link in major_sites %}
<li><a href="{% url 'service:majorsite' link_urls.id %}">{{ link_urls.location }}</a></li>
{% endfor %}
</ul>
无论您想在模板中的什么位置显示它,包含
它。
<div class="sidebar">
<h3>Service Menu</h3>
{% include 'service/partial_menu.html' %}
</div>
关于python - django - 如何创建要在多个 View 中使用的对象(对于动态菜单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37540552/