Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 过滤和预处理django http请求的响应内容_Python_Django_Httprequest_Httpresponse - Fatal编程技术网

Python 过滤和预处理django http请求的响应内容

Python 过滤和预处理django http请求的响应内容,python,django,httprequest,httpresponse,Python,Django,Httprequest,Httpresponse,以下django中间件函数用于标识django响应对象中的活动链接。如果链接处于活动状态,则其标记为css类,href属性将替换为javascript:voidnull;。使用此函数时,return语句前的最后两行非常慢,我无法使用它,而且,没有呈现css、js和图像。但是,如果我将这两个调用放入for循环,那么一切都很好,速度也很快。但是,我不希望对页面上的每个活动链接执行这两个调用,相反,我希望它们只执行一次,但这不起作用,我真的不明白for循环与此有什么关系。它没有美化组的问题,因为它与r

以下django中间件函数用于标识django响应对象中的活动链接。如果链接处于活动状态,则其标记为css类,href属性将替换为javascript:voidnull;。使用此函数时,return语句前的最后两行非常慢,我无法使用它,而且,没有呈现css、js和图像。但是,如果我将这两个调用放入for循环,那么一切都很好,速度也很快。但是,我不希望对页面上的每个活动链接执行这两个调用,相反,我希望它们只执行一次,但这不起作用,我真的不明白for循环与此有什么关系。它没有美化组的问题,因为它与re.sub“\s+”、response.content或replace函数相同。就我所研究的而言,我可以告诉您,return语句之前的最后一行是慢行,只要它不是在for循环中执行的。对于可能的解释我真的很兴奋

import re  
from django_projects.projects.my_project.settings import SITE_NAME  
from BeautifulSoup import BeautifulSoup  

class PostRender():  
    def process_response(self, request, response):  
        link_pattern=re.compile('<a.*href="(http://%s)*%s".*>' % (SITE_NAME,request.path),re.IGNORECASE) 
        klass_pattern=re.compile('class="[^"]*"',re.IGNORECASE)  
        href_pattern=re.compile('href="(http://%s)*%s(\?.*)*"' % (SITE_NAME,request.path),re.IGNORECASE)  
        #find all active links
        search=re.finditer(link_pattern ,response.content)  
        for res in search:  
            result=res.group()  
            klassname='class="active"'  
            if 'class' in result:  
                klass=re.search(klass_pattern,result).group().split('=')[1]  
                if len(klass) != 0:  
                    klassname='class="%s %s"' % (klass[1:-1],'active')  
            link=re.sub(href_pattern,'href="javascript:void(null);"',re.sub(klass_pattern,klassname,result))  
            response.content=re.sub(result,link,response.content)  
        soup=BeautifulSoup(response.content)  
        response.content=soup.prettify()  
        return response  

为什么不使用BeautifulSoup查找和替换链接?它比正则表达式更适合这种情况?谢谢你的提示,我刚刚读了一篇教程,解释了这种汤的东西,太棒了!为什么不使用BeautifulSoup查找和替换链接?它比正则表达式更适合这种情况?谢谢你的提示,我刚刚读了一篇教程,解释了这种汤的东西,太棒了!