2012-06-10 35 views
4

我正在创建一个自定义中间件来Django编辑响应对象作为审查。我想找到一种方法来进行一种搜索和替换,用我选择的一个替换某个词的所有实例。Django中间件 - 如何编辑Django Response对象的HTML?

我创建了我的中间件对象,将它添加到我的MIDDLEWARE_CLASSES的设置中,并设置它来处理响应。但到目前为止,我只找到方法来添加/编辑饼干,设置/删除字典项目,或写HTML的末尾:提前

class CensorWare(object): 
    def process_response(self, request, response): 
     """ 
     Directly edit response object here, searching for and replacing terms 
     in the html. 
     """ 
     return response 

感谢。

+2

你尝试过什么吗?你非常接近解决方案。 – Tadeck

回答

6

你可以简单地修改response.content字符串:

response.content = response.content.replace("BAD", "GOOD") 
0

也许我的回答一点。当你尝试做出response.content.replace(“BAD”,“GOOD”)时,你会得到错误,你不能用字符串来做,因为response.content是字节数组。我已经将句法字符串'gen_duration_time_777'和'server_time_777'添加到基础模板中。这对我有用。

import time 
from datetime import datetime 

class StatsMiddleware(object): 
    duration = 0 

    def process_request(self, request): 
     # Store the start time when the request comes in. 
     request.start_time = time.time() 

    def process_response(self, request, response): 
     # Calculate and output the page generation duration 
     # Get the start time from the request and calculate how long 
     # the response took. 
     self.duration = time.time() - request.start_time 

     response["x-server-time"] = datetime.now().strftime("%d/%m/%Y %H:%M") 
     response.content = response.content.replace(b"server_time_777", str.encode(response["x-server-time"])) 
     response["x-page-generation-duration-ms"] = '{:.3f}'.format(self.duration) 
     response.content = response.content.replace(b"gen_duration_time_777", str.encode(response["x-page-generation-duration-ms"])) 
     return response