为了账号安全,请及时绑定邮箱和手机立即绑定

Django Python - 在公共标头中添加表值

Django Python - 在公共标头中添加表值

尚方宝剑之说 2023-07-11 16:56:32
也许尝试做一些不可能的事情,但基本上,我创建了一个文件 header.html,其中包含所有其他 html 页面,例如 {% include "project/header.html" %} 这工作正常,挑战在于 header.html 我想要放置一个包含来自模型的值的下拉菜单。如果我直接调用 header.html 它工作正常,但在其他页面内则不行。header.html...<ul>{% for club in clubs.all %}<li> <a href="#">{{ club.name }}</a></li>{% endfor %}...views.pyfrom django.http import HttpResponsefrom django.shortcuts import renderfrom .models import Clubdef index(request):    clubs = Club.objects    return render(request, 'project/index.html',{'clubs':clubs})这可能吗?提前致谢
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

您可以为此编写一个上下文处理器[Django-doc] 。这是每次添加到请求中的方法。

在应用程序(您使用的任何应用程序)中,您可以定义上下文处理器:

# app/context_processors.py


def all_clubs(request):

    from app.models import Club

    return {

        'clubs': Club.objects.all()

    }

然后在文件中注册此上下文处理器settings.py,以便在每次render(…)调用时将其添加到上下文中:


# settings.py


# …


TEMPLATES = [

    {

        # …

        'OPTIONS': {

            'context_processors': [

                # …

                'app.context_processors.all_clubs'

            ]

        }

        # …

    }

]

现在您不再需要传入clubs每个渲染调用。它将自动添加。由于QuerySets 是惰性的,如果您的模板不使用 s ,它将不会访问数据库clubs。


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信