我刚刚制作了可以附加到任何型号的可重复使用的评论应用程序,请参阅我遇到问题的视图(我没有包含整个逻辑,只包含与问题相关的逻辑)。
当没有request.POST时,一切正常,但是当我尝试添加评论时,保存后出现重定向问题,我收到错误
dictionary update sequence element #0 has length 0; 2 is required
有问题的行是context.update(字典)。添加评论时看起来似乎是空的,但我不明白为什么。
我的逻辑是:
当没有request.POST时,查看add_comment将返回 {' comment_form&#39 ;: comment_form,' comments&#39 ;: comments}
request.method==POST'
时,context.update(dictionary)
不应该。{li>
甚至被执行,因为返回重定向(节点)。应该结果 启动代码在视图配置文件中执行,因为它在哪里 重定向(节点)应该导致。
我知道我可以在profile.views.py中使用重定向,但是我需要为每个带有添加注释的视图执行此操作,这非常不方便。
comment.views.py
from django.shortcuts import redirect
from comment.forms import AddCommentForm
from comment.models import Comment
def add_comment(request, node):
if request.user.is_authenticated():
user = request.user
else:
user = None
comment_form = None
comments = Comment.objects.get_comments(node) # custom manager method for getting all comments
if user:
if request.method == 'POST':
comment_form = AddCommentForm(request.POST)
if comment_form.is_valid():
comment_form.save(node=node, user=user) # custom form save method, updating missing fields
return redirect(node) #redirect to node.get_absolute_url()
else:
comment_form = AddCommentForm()
return {'comment_form': comment_form, 'comments': comments}
profile.views.py - 另一个应用,我想通过仅引用视图add_comment来减少添加评论的代码
from django.shortcuts import render, get_object_or_404
from django.contrib.auth.models import User
from comment.views import add_comment
def profile(request, id):
user = get_object_or_404(User, id=id)
dictionary = add_comment(request, user)
context = {'user': user}
context.update(dictionary) #problematic line
return render(request, 'profile/profile account.html', context)
答案 0 :(得分:0)
问题是add_comment可以返回不是字典的东西:即重定向(它是HttpResponse的子类)。在使用之前,您总是可以检查返回的类型:
result = add_comment(request, user)
if not isinstance(result, dict):
return result
else:
context.update(result)