gpt4 book ai didi

python - django - 如何创建要在多个 View 中使用的对象(对于动态菜单)

转载 作者:行者123 更新时间:2023-12-01 03:55:26 25 4
gpt4 key购买 nike

我有一个动态菜单,包含在多个模板中。 (侧边栏.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/

25 4 0