3

我正在开发一个 Django 应用程序。我花了大约 40 到 50 个小时研究 Django,并且我正在准备申请!

但是,我开始遇到“更严重”的错误,有些人可能会这样称呼它们,因为我无法从堆栈跟踪中准确找出真正的问题是什么。

基本上,我单击页面上的链接,然后弹出此错误:

请求方法:GET 请求 URL:/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 也绝对没问题,我对此进行了测试,我基本上是从 login.html 页面调用它,在该页面中显示有效的用户登录。

非常感谢您的帮助所以,我通常不问问题,但我已经被困在这个问题上 5-6 个开发小时。尽量不要嘲笑我不理解这个可能简单但隐藏的初学者错误:)

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

在您的回答中,仅参考文档的特定实例,因为我已经进行了大量搜索,但也许它并没有完全缩小到我的问题所在:D

再次感谢,

詹姆士

评论一:教程

这是我所指的教程。我一直在识别错误​​,因为我拥有所有代码并且一切正常,直到我尝试单击超链接。我对错误的来源没有经验。

第二条评论:相关代码

用户配置文件/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 , 用户配置文件 urls.py

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

1 回答 1

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请求或表单中存在错误,并且您想要重新呈现上下文以显示这些错误并允许用户更正他们。

于 2013-07-17T00:32:57.973 回答