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
。它会自动添加。由于QuerySet
s 是惰性的,所以如果你的模板不使用clubs
,它不会命中数据库。
【讨论】:
非常感谢威廉。问题排序。我必须继续阅读 Python 文档!!以上是关于Django Python - 在公共标题中添加表值的主要内容,如果未能解决你的问题,请参考以下文章
python编程--django框架,想要添加一个表进到数据库里