PHP的等价函数";ob";Python/Django中的函数
有没有像PHPPHP的等价函数";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
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,但不知道如何实现这一点