Python/Django中PHP“in”函数的等效函数
Posted
技术标签:
【中文标题】Python/Django中PHP“in”函数的等效函数【英文标题】:Equivalent funcion of PHP "ob" functions in Python/Django 【发布时间】:2014-03-01 19:44:07 【问题描述】:是否有任何函数可以实现与 php ob_start(myCallbackFunction)
和 ob_end_flush()
相同的结果,允许我修改 Python 框架(Django/其他)中的布局和视图?谢谢!
更新
<?php
ob_start(function($res)
echo str_replace('test','new string',$res);
);
?>
test
test
test
test
<?php ob_end_flush(); ?>
【问题讨论】:
您可以在您的预期用例上进行扩展吗?虽然我想不出直接的替代方案,但可能有一种更常见的 django-ic 方式来实现相同的最终结果。 另外,您似乎可以使用yield
来模拟缓冲区。看到这个:***.com/questions/1371020/django-flush-response
更新了我的问题,我想做类似的事情
您可能应该在需要的地方发布 Python 代码,而不是发布 PHP 代码,因为您不能像在 PHP 中那样在 Django 中逐个打印响应,因此您的问题不会很有道理。
【参考方案1】:
要直接在 Python 中实现此结果,您可以按照此处讨论的方式修补 stdout/stderr;
Temporarily Redirect stdout/stderr
对于 Django 模板,您只需将调用包装在一个块(或单独的文件)中,并在必要时包含它们。
值得一提的是,这种方法不是很pythonic,您应该考虑一下您要做什么,并找到一种更pythonic的方法来实现它。如果您告诉我们更多有关您的用例的信息,我们或许可以提出更好的方法。
【讨论】:
在我的 php 代码中,每个视图和布局都有用于替换字符串的 ob 函数,例如网络论坛上的一些过滤器。并且 ob 函数将回调到一个控制需要替换哪些字符串的助手,我正在考虑转移到 python 但不知道如何实现这一点【参考方案2】:让我们在python3中实现PHP
的ob_start和ob_get_contents函数。
输出被存储在一个文件中,任何类型的流都可以使用。
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"))
会打印
嗨约翰 再见约翰
【讨论】:
以上是关于Python/Django中PHP“in”函数的等效函数的主要内容,如果未能解决你的问题,请参考以下文章
Error: That port is already in use——Python Django