html - 如何为所有模板获取相同的信息?
问题描述
所以在 Django 中,我有一个基本模板,其中包含一些联系方式。但我生成的每一个视图都必须有这条线。
contact = Contact.objects.first()
然后我必须将该对象添加到使用模板加载的字典中。
更好的处理方法是什么?我很难相信我正在以正确的方式做这件事。
示例views.py
from django.shortcuts import render
from services.models import Service, ServicesDetail
from .models import Feature, CompanyDetail, TeamMember, TeamDetail, Banner
from contact.models import ContactDetail
import json
# Create your views here.
def home(request):
services = Service.objects
try:
overview = ServicesDetail.objects.first()
except ServicesDetail.DoesNotExist:
overview = ''
try:
company = CompanyDetail.objects.first()
except CompanyDetail.DoesNotExist:
company = ''
features = Feature.objects
contact_details = ContactDetail.objects.first()
banners = Banner.objects
return render(request, 'home.html', {'overview': overview,
'services': services,
'company': company,
'features': features,
'contact_detail': contact_details,
'banners': banners})
def company(request):
services = Service.objects
try:
company = CompanyDetail.objects.first()
except CompanyDetail.DoesNotExist:
company = ''
features = Feature.objects
contact_details = ContactDetail.objects.first()
return render(request, 'company.html', {'services': services,
'company': company,
'features': features,
'contact_detail': contact_details,})
def team(request):
services = Service.objects
members = TeamMember.objects
try:
teampage = TeamDetail.objects.first()
except TeamDetail.DoesNotExist:
teampage = ''
contact_details = ContactDetail.objects.first()
return render(request, 'team.html', {'services': services,
'members': members,
'teampage': teampage,
'contact_detail': contact_details,})
解决方案
您不需要在每个视图中都这样做,只需编写自定义上下文处理器:
def contact_details(request):
return {'contact_detail': contact_details = ContactDetail.objects.first()}
并将其添加到TEMPLATES
设置中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'path.to.processor.contact_details'
],
},
},
]
推荐阅读
- api - Flutter Passing Data Between Screens
- coldfusion - 我们如何在鼠标悬停时关闭 ColdFusion Builder 标记帮助?
- r - zoo:rollapply() 上的 lm() 给出了奇怪的结果
- sql - where子句中的多种场景
- dictionary - 如何使用 Haskell 中的给定字典列表将一个字符串翻译成另一个字符串?
- r - 根据条件在 R 中生成有意义的样本数据?
- python - Python:在while循环中列出索引超出范围
- html - 滚动容器将平行 div 推到右侧而不是创建水平滚动
- php - HTML CSS 响应式
- html - 如果绝对位置是相对于 HTML 的,那么为什么改变 HTML 的高度不会影响绝对定位元素的高度呢?