我从def start方法开始,它调用go_adder在adder.html中添加5次num值,直到num等于5.之后,adder方法应该返回ready = 1
在views.py中
def start(request):
num=0
ready_or_not=go_adder(num)
return HttpResponse("Ready: %s "%str(ready_or_not))
def go_adder(num):
ready=0
if num<5:
return render_to_response('adder.html',{'num':num})
elif num==5:
ready=1
return ready
def check_post(request,num):
if request.method == 'POST':
num+=1
return adder(num)
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此代码段时,它一直有效,直到我的"num = 5",然后我得到了这个错误:
'int' object has no attribute 'status_code'
Exception Location: C:\Python27\lib\site-packages\django\middleware\common.py in process_response, line 94
Run Code Online (Sandbox Code Playgroud)
和Traceback说:
C:\Python27\lib\site-packages\django\core\handlers\base.py in get_response
response = middleware_method(request, response) ...
? Local vars
C:\Python27\lib\site-packages\django\middleware\common.py in process_response
if response.status_code == 404: ...
? Local vars
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?请你帮助我好吗 ?
django视图需要返回一个HttpResponse对象.你正在这样做num < 5,但是在以下情况下你返回一个int num == 5:
def adder(num):
ready=0
if num<5:
num+=1
# This renders the template and returns and HttpResponse; good
return render_to_response('adder.html',{'num':num})
elif num==5:
ready=1
# DONT RETURN AN INT HERE. RETURN AN HttpResponse
return ready
Run Code Online (Sandbox Code Playgroud)
如果你想要的num==5只是返回数字1的纯文本响应,那么你可以返回一个HttpResponse并设置内容类型:
elif num==5:
ready=1
return HttpResponse(str(ready), content_type="text/plain")
Run Code Online (Sandbox Code Playgroud)
根据我们的对话,您建议您希望视图不断传递计数值,无论如何,并且您正在num以实际形式发布值.如果数字小于5,则应返回一种模板,否则应返回另一种模板.
您可以将两个不同的视图合并为一个,以便在首次加载页面时处理原始GET请求,以及表单提交的POST请求.只需确保将表单指向同一页面即可.
def check(request):
num = 0
if request.method == 'POST':
num = int(request.POST.get('num'))
return adder(num)
def adder(num):
if num < 5:
num += 1
tpl_name = 'adder.html'
else:
tpl_name = 'print.html'
return render_to_response(tpl_name, {'num':num})
Run Code Online (Sandbox Code Playgroud)
check() 是你的单一观点. adder()是辅助函数,它将添加值,检查它,并HttpResponse根据该值返回一个对象.您必须始终将此视图从您的视图返回给客户端.num你说你实际上是通过你num的网址传递而不是通过POST表单.对最后一个例子的小调整.你甚至都不需要adder()了.您只需要一个视图.
将您的网址设置为可选num模式:
urls.py
(r'^checker/(?P<num>\d+)$', 'myapp.views.check')
Run Code Online (Sandbox Code Playgroud)
views.py
def check(request, num=0):
num = int(num)
if num < 5:
num += 1
tpl_name = 'adder.html'
else:
tpl_name = 'print.html'
return render_to_response(tpl_name, {'num':num})
Run Code Online (Sandbox Code Playgroud)
您的"检查器"网址现在有一个可选的号码.如果它未在url中传递,则它将是0视图中的值.如果您将其作为POST请求发送,它将添加并返回不同的模板.
| 归档时间: |
|
| 查看次数: |
9613 次 |
| 最近记录: |