Django手动调试流程

时间:2013-07-16 23:58:22

标签: python django django-models django-forms django-views

我正在开发Django应用程序。我花了大约40-50个小时研究Django,我正在努力制作应用程序!

但是,我开始遇到“更严重”的错误,正如有些人可能会称之为错误,因为我无法从我的堆栈跟踪中找出真正的问题。

基本上,我点击了我页面上的链接,弹出此错误:

请求方法:GET 请求网址:/ accounts / profile / Django版本:1.5.1 异常类型:ValueError 例外价值:
*视图userprofile.views.user_profile未返回HttpResponse对象。*

这让我相信错误发生在我的视图文件中,除了我正在遵循行的教程行,我被引导相信错误可能在于如何使用forms.py来创建HttpResponse对象

简而言之,就是,

form = UserProfileForm(request.POST, instance=request.user.profile)
...
args = {}
args.update(csrf(request)) // security token
args['form'] = form
return render_to_response('profile.html', args)

profile.html也绝对没问题,我测试过,我基本上是在一个我显示有效用户登录信息的loggedin.html页面中调用它。

非常感谢你的帮助,我通常不会问问题,但是我一直坚持这个问题5-6个小时。尽量不要嘲笑我不理解这个简单但隐藏起初的错误:)

另外,如果你能说明你是如何解决这个错误的话,我更愿意在回答中,特别是说明我的想法是什么以及根本误解在哪里。

在你的回答中,只引用了文档的特定实例,因为我已经进行了大量的搜索,但也许它并没有缩小到我的问题:D

再次感谢,

詹姆斯

评论一:教程

Here is the tutorial我指的是。我正在坚持识别错误,因为我有所有的代码,一切正常,直到我尝试点击超链接。我没有经验 错误来自哪里。

第二条评论:相关代码

USERPROFILE / views.py

 def user_profile(request):
    if request.method=='POST':
       form = UserProfileForm(request.POST, instance=request.user.profile)
       if form.is_valid():
          form.save()
          return HttpResponseRedirect('/accounts/loggedin')
       else:
          user = request.user
          profile = user.profile
          form = UserProfileForm(instance=profile)

       args = {}
       args.update(csrf(request)) // security token
       args['form'] = form
       return render_to_response('profile.html', args)

myapp urls.py,userprofile urls.py

(r'^accounts/', include ('userprofile.urls')),
...
url(r'^profile/$', 'userprofile.views.user_profile'),

1 个答案:

答案 0 :(得分:4)

如果这确实是您的视图代码,那么这是一个简单的缩进错误。它应该是:

def user_profile(request):
    if request.method=='POST':
        form = UserProfileForm(request.POST, instance=request.user.profile)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/loggedin')
    else:
        user = request.user
        profile = user.profile
        form = UserProfileForm(instance=profile)

    args = {}
    args.update(csrf(request)) // security token
    args['form'] = form
    return render_to_response('profile.html', args)

当request.METHOD为GET时,在初始化if上没有else子句,因此视图函数结束而不返回任何内容。相反,您希望创建表单,将其添加到上下文并呈现它 - 要么是因为它是GET请求,要么是因为表单中存在错误,并且您想要重新呈现上下文以显示这些错误,允许用户更正它们。