也许尝试做一些不可能的事情,但基本上,我创建了一个文件 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。
添加回答
举报
0/150
提交
取消