Reputation: 66667
this my middleware code :
from django.conf import settings
from django.template import RequestContext
class BeforeFilter(object):
def process_request(self, request):
settings.my_var = 'Hello World'
request.ss = 'ssssssssss'
return None
def process_response(self, request, response):
return response
this is the settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
MIDDLEWARE_CLASSES = (
...
'middleware.BeforeFilter',
)
and the view is :
#coding:utf-8
from django.conf import settings
from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.template import RequestContext
def index(request):
context = RequestContext(request)
context['a'] = 'aaaa'
return render_to_response('a.html',context)
the html is :
{{a}}fffff{{ss}}
but it not show {{ss}}:
aaaafffff
so how do i show :
aaaafffffssssssss
how to insert some text in all django context using django middleware,
so that i cant use to insert the text everytime ,
thanks
Upvotes: 16
Views: 9730
Reputation: 1508
The OP asked for how to do this with middleware but I found this question without needing that requirement. The currently accepted answer is outdated and the edit queue is full.
As of Django 1.10, the TEMPLATE_CONTEXT_PROCESSORS
setting has been moved to the context_processors
option of TEMPLATES
.
context_processors
is a list of dotted Python paths to callables that are used to populate the context when a template is rendered with a request. These callables take a request object as their argument and return a dict of items to be merged into the context. It defaults to an empty list.
# context_processors.py
def sample_context_processor(request):
return {'key': 'value'}
# settings.py
TEMPLATES = [
{
'OPTIONS': {
'context_processors': [
'myproject.context_processors.sample_context_processor',
],
},
},
]
Upvotes: 1
Reputation: 6570
To meet your initial goal, I do not think the BeforeFilter middle ware is required. What we need is just a template context processor.
Write a context processor as following:
#file: context_processors.py
def sample_context_processor(request):
return {'ss':'ssssssssss'} #or whatever you want to set to variable ss
then add the context processor to TEMPLATE_CONTEXT_PROCESSORS list
#file: settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'myproject.context_processors.sample_context_processor',
)
Upvotes: 26
Reputation: 13496
You need to specify that you accessing request
in the template. If you do just {{ss}}
the variable does not exist since it an attribute of request
(you did request.ss = 'ssssssssss'
, right?). So do {{request.ss}}
in your template and it should work.
Upvotes: 3