2014-09-28 90 views
0

我有下面的错误,我不知道问题是什么。 ValueError:视图bookmarks.views.bookmark_save_page未返回HttpResponse对象。它返回None而不是。提交表单时视图没有返回HttpResponse对象

这里是bookmarks.views.bookmark_save_page的代码:

def bookmark_save_page(request): 
if request.method == 'POST': 
    form = BookmarkSaveForm(request.POST) 
    if form.is_valid(): 
     link, dummy = Link.objects.get_or_create(
      url = form.cleaned_data['url'] 
     ) 
     bookmark, created = Bookmark.objects.get_or_create(
      user=request.user, 
      link = link 
     ) 
     bookmark.title = form.cleaned_data['title'] 

     if not created: 
      bookmark.tag_set.clear() 

     tag_names = form.cleaned_data['tags'].split() 
     for tag_names in tag_names : 
      tag, dummy = Tag.objects.get_or_create(name=tag_names) 
      bookmark.tag_set.add(tag) 

     bookmark.save() 
     return HttpResponseRedirect(
      '/user/%s/' %request.user.username 
     ) 
    else: 
     form = BookmarkSaveForm() 
    variables = RequestContext(request,{ 
     'form' : form 
    }) 
    return render_to_response('bookmark_save.html', variables) 

'bookmark_save.html' 的代码:

{% extends "base.html" %} 
{% block title %}save your bookmark{% endblock %} 
{% block head %}save your bookmark{% endblock %} 
{% block content %} 
<form method="post" action="."> 
{{ form.as_p }} 
<input type="submit" value="save" /> 
</form> 
{% endblock %} 

问题是什么?我错过了什么?

回答

2

您的整个代码在if条件下缩进,所以当最初请求页面时,不会发送任何响应。你需要的最后一个return移动到相同的水平为初始if

def bookmark_save_page(request): 
    if request.method == 'POST': 
    form = BookmarkSaveForm(request.POST) 
    if form.is_valid(): 
     link, dummy = Link.objects.get_or_create(
      url = form.cleaned_data['url'] 
     ) 
     bookmark, created = Bookmark.objects.get_or_create(
      user=request.user, 
      link = link 
     ) 
     bookmark.title = form.cleaned_data['title'] 

     if not created: 
      bookmark.tag_set.clear() 

     tag_names = form.cleaned_data['tags'].split() 
     for tag_names in tag_names : 
      tag, dummy = Tag.objects.get_or_create(name=tag_names) 
      bookmark.tag_set.add(tag) 

     bookmark.save() 
     return HttpResponseRedirect(
      '/user/%s/' %request.user.username 
     ) 
    else: 
     form = BookmarkSaveForm() 
    variables = RequestContext(request,{ 
     'form' : form 
    }) 
    return render_to_response('bookmark_save.html', variables) 

您还可以进一步简化代码:

from django.shortcuts import render, redirect 

def bookmark_save_request(request): 
    form = BookmarkSaveForm(request.POST or None) 
    if form.is_valid(): 
     # .. your logic here 
     return redirect('/user/%s' % (request.user.username,)) 
    return render(request, 'bookmark_save.html', {'form': form}) 
+0

我有一个另一个错误这一次。 UnboundLocalError at/save /局部变量'变量'在赋值之前被引用,例外类型:\t UnboundLocalError,异常值:\t 赋值之前引用的局部变量'变量', – 2014-09-28 07:01:50

+0

我修改的唯一东西是最后一次返回到与最初如果你说的话。 – 2014-09-28 07:03:54

+0

这是因为当请求方法不是'POST'时,变量'variables'将永远不会被定义,但会在return语句中使用。你可以在'if'语句之前通过初始化'variables'到'{}'来解决这个问题。尽管你可能想要考虑像Khalid所建议的那样重构你的代码。 – RevolutionTech 2014-09-28 07:15:46

相关问题