contextをMiddlewareみたいに共通化できる
context_processors
をやってみます。417
context_processorsを作成します!
ファイル名は何でもいいです。
polls/context_processors.py
from .models import *
from django.http import HttpRequest
def get_options(request: HttpRequest):
options = Option.objects.all()
context = {}
context["OPTIONS"] = {}
context["OPTIONS"]['url'] = f'{request.scheme}://{request.get_host()}{request.path}'
for option in options:
context["OPTIONS"][option.name] = option.value
return context
context_processorsを登録
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['mysite/templates'],
'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',
'polls.context_processors.get_options', # 追加しました
],
},
},
]
Middlewareみたいに簡単に扱えて使いやすいです!
417
ただMiddlewareと違って呼び出しが、必ずviewの後になってしまうようなので、viewでいじるために、代入するような使い方をしたい場合はMiddlewareもしくはTemplateViewでやる必要がありますね。
417