由于每个问题最好只有一个单独的问题,如果与我在另一个问题相关,请耐心等待。
情况如下:
我在html中有一个表单,可以设置一个数字,当提交表单时,它会调用views.stream_response
,将值传递给stream.py,并返回一个StreamingHttpResponse,在“/stream_response/”上出现了一个“虚拟”的空白浏览器页面,每秒钟可以看到一个渐进的数字,直到m
为止:
1
2
3
..
m
stream.py
import time
def streamx(m):
lista = []
x=0
while len(lista) < m:
x = x + 1
time.sleep(1)
lista.append(x)
yield "<div>%s</div>\n" % x
print(lista[-1])
return (x)
---UPDATE---
views.py
def stream_response(request):
test = InputNumeroForm()
if request.method == 'POST':
test = InputNumeroForm(data=request.POST)
if test.is_valid():
m = test.cleaned_data['numero']
print (test)
print("m = ", m)
#resp = StreamingHttpResponse(stream_response_generator(m))
resp = StreamingHttpResponse(stream.streamx(m))
return resp
return render(request, 'homepage/provadata.html',{'user.username': request, 'test': test}, context_instance = RequestContext(request))
urls.py
...
url(r'^homepage/provadata/$', views.provadata),
url(r'^stream_response/$', views.stream_response, name='stream_response'),
...
homepage/provadata.html
<form id="numero" action="/stream_response_bis/" method="POST">
{% csrf_token %}
{{test}}
<input type="submit" value="to view" />
</form>
//{{ris}}
我尝试使用render_to响应保持在首页/provadata.html,并查看渐进式列表,但是stream.py没有启动,我只能在命令行中看到输入数字m。
我在views.py中尝试使用这个建议。
def stream_response_generator(m):
ris = stream.streamx(m)
yield loader.get_template('homepage/provadata.html').render(Context({'ris': ris}))
在模板中添加 {{ris}}
并在 stream_response 函数中使用
resp = StreamingHttpResponse(stream_response_generator(m))
,但是在模板中我得到了以下结果:
<generator object streamx at 0x0000000004BEB870>
在命令行中它打印了输入值,但它不再将参数传递给 stream.py。
那么,我该如何解决这个问题?