如何使用django中间件在所有django上下文中插入一些文本

时间:2011-05-12 04:25:26

标签: python django templates

这是我的中间件代码:

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

这是settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
)
MIDDLEWARE_CLASSES = (
    ...
    'middleware.BeforeFilter',
)

,视图是:

#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)

html是:

{{a}}fffff{{ss}}

但它没有显示{{ss}}:

aaaafffff 

所以我如何展示:

aaaafffffssssssss

如何使用django中间件在所有django上下文中插入一些文本,

所以我不能每次都插入文本,

感谢

2 个答案:

答案 0 :(得分:26)

为了达到您的初始目标,我认为不需要 BeforeFilter 中间件。我们需要的只是一个template context processor

编写上下文处理器如下:

#file: context_processors.py

def sample_context_processor(request):
   return {'ss':'ssssssssss'} #or whatever you want to set to variable ss

然后将上下文处理器添加到TEMPLATE_CONTEXT_PROCESSORS列表

#file: settings.py 

TEMPLATE_CONTEXT_PROCESSORS = (
    'myproject.context_processors.sample_context_processor',
)

答案 1 :(得分:2)

您需要指定在模板中访问request。如果您只是{{ss}},则该变量不存在,因为它是request的属性(您执行了request.ss = 'ssssssssss',对吧?)。因此,请在模板中{{request.ss}}进行操作。