Django';int';对象没有属性';状态代码';

Django';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方法开始,它调用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<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})