Django';int';对象没有属性';状态代码';
我从def start方法开始,它调用go_adder在adder.html中添加num值5次,直到num等于5。之后,加法器方法应该返回ready=1 In views.pyDjango';int';对象没有属性';状态代码';,django,Django,我从def start方法开始,它调用go_adder在adder.html中添加num值5次,直到num等于5。之后,加法器方法应该返回ready=1 In 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&l
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)
追踪显示:
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
我怎样才能纠正这个错误?你能帮帮我吗 django视图需要返回一个
HttpResponse
对象。在num<5
时执行此操作,但在num==5
时返回一个int:
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
更新1
根据我们的对话,您建议希望视图始终传递计数值,无论发生什么情况,并且以实际形式发布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})
视图.py
(r'^checker/(?P<num>\d+)$', 'myapp.views.check')
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})
def检查(请求,num=0):
num=int(num)
如果num<5:
num+=1
tpl_name='adder.html'
其他:
tpl_name='print.html'
返回render_to_响应(tpl_名称,{'num':num})
您的“检查器”url现在有一个可选编号。如果未在url中传递,则视图中的值将为
0
。如果您将其作为POST请求发送,它将添加并返回不同的模板。您的示例不清楚。为什么go\u adder
返回不同类型的对象?你在调用这两个视图中的哪一个?因为,我想重复这个过程,直到达到值5为止。在此之前,我调用adder.html,一旦调用了5次,就返回一个ready位,即1。还有其他方法吗?这里的逻辑应该有效,但返回值无效。如果num
达到5,该怎么办?不同的模板?而int
不是合适的返回值。您只是想让它返回一个带有数字1的纯文本响应吗?好的,我明白您的意思。如何从start方法中获取该值,因为我需要处理那里的就绪值。似乎您的页面在第一个GET之后永远不会返回到start
视图,因为您正在将其发送到另一个视图。
(r'^checker/(?P<num>\d+)$', 'myapp.views.check')
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})