Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
PHP的等价函数";ob";Python/Django中的函数_Python_Django_View_Ob Start - Fatal编程技术网

PHP的等价函数";ob";Python/Django中的函数

PHP的等价函数";ob";Python/Django中的函数,python,django,view,ob-start,Python,Django,View,Ob Start,有没有像PHPob\u start(myCallbackFunction)和ob\u end\u flush()这样的函数可以实现相同的结果,允许我修改Python框架(Django/其他)中的布局和视图?谢谢 更新 <?php ob_start(function($res){ echo str_replace('test','new string',$res); }); ?> test test test test <?php ob_end_flush(); ?&g

有没有像PHP
ob\u start(myCallbackFunction)
ob\u end\u flush()
这样的函数可以实现相同的结果,允许我修改Python框架(Django/其他)中的布局和视图?谢谢

更新

<?php
ob_start(function($res){
   echo str_replace('test','new string',$res);
});
?>

test
test
test
test

<?php ob_end_flush(); ?>

测试
测试
测试
测试

要直接在Python中实现这一结果,您可以像这里讨论的那样修补stdout/stderr

对于Django模板,您只需将调用包装在一个块(或单独的文件)中,并在必要时包含它们


值得一提的是,这种方法并不是很符合pythonic,您应该考虑一下您正在尝试做什么,并找到一种更符合pythonic的方法来实现它。如果您能告诉我们更多关于您的用例的信息,我们可能会建议一种更好的方法。

让我们用python3实现
PHP
和函数

输出存储在文件中,也可以使用任何类型的流

from functools import partial
output_buffer = None
print_orig = print
def ob_start(fname="print.txt"):
    global print
    global output_buffer
    print = partial(print_orig, file=output_buffer)
    output_buffer = open(fname, 'w')
def ob_end():
    global output_buffer
    close(output_buffer)
    print = print_orig
def ob_get_contents(fname="print.txt"):
    return open(fname, 'r').read()
用法:

print ("Hi John")
ob_start()
print ("Hi John")
ob_end()
print (ob_get_contents().replace("Hi", "Bye"))
将打印

嗨,约翰 再见,约翰


你能在你的预期用例上花费吗?虽然我想不出一个直接的替代方案,但可能有一种更常见的django ic方法来实现相同的最终结果。此外,您似乎可以使用
yield
来模拟缓冲区。看到这个:更新了我的问题,我想做一些类似的事情,而不是发布PHP代码,你可能应该在需要的地方发布Python代码,因为你不能像在PHP中那样在Django中逐条打印响应,因此你的问题没有多大意义。在我的PHP代码中,每个视图和布局都有替换字符串的ob功能,例如web论坛上的一些过滤器。ob函数将回调到一个助手,该助手控制需要替换的字符串,我正在考虑使用python,但不知道如何实现这一点