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

Posted

技术标签:

【中文标题】Django Python - 在公共标题中添加表值【英文标题】:Django Python - Add table values inside common header 【发布时间】:2020-12-22 23:09:14 【问题描述】:

也许试图做一些不可能的事情,但基本上,我创建了一个文件 header.html,其中包含我的所有其他 html 页面,例如% 包括 "project/header.html" % 这很好用,挑战在于在 header.html 上我想放置一个下拉菜单,其中包含来自模型的值。如果我直接调用 header.html ,但在其他页面内时,它工作正常。

header.html

...
<ul>
% for club in clubs.all %
<li> <a href="#"> club.name </a></li>
% endfor %
...

views.py

from django.http import HttpResponse
from django.shortcuts import render

from .models import Club
def index(request):
    clubs = Club.objects
    return render(request, 'project/index.html','clubs':clubs)

这甚至可能吗? 提前致谢

【问题讨论】:

【参考方案1】:

您可以为此写一个context processor [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 是惰性的,所以如果你的模板不使用clubs,它不会命中数据库。

【讨论】:

非常感谢威廉。问题排序。我必须继续阅读 Python 文档!!

以上是关于Django Python - 在公共标题中添加表值的主要内容,如果未能解决你的问题,请参考以下文章

python编程--django框架,想要添加一个表进到数据库里

多个模型 - 一个公共主键 (Django)

python django中的orm外键级联删除

python测试开发django-6.模板中include使用

Django DB 迁移添加新列,但不要编辑表中已有的值

将联系表添加到静态网站 [关闭]