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

标签 python django

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

相关文章:

python - 如何更新 Django models.py 中的外键字段?

python - JIRA REST API 和 kerberos 身份验证

python - 如何将计算字段添加到 Django 模型

python - 将多个 numpy 数组写入文件

python - 调试Django时没有显示调试信息 | Django

python - 对象不支持项目分配错误

python - 在复平面加corr中找到A(x)和B(y)的交点。 x和y

python - 计算相对于给定人口的百分位数排名

javascript - 如何在 django 的 View 之间传递对象?

python - django MySQLdb 不同步