问题描述
我下面的观点只是经历一个迭代周期,然后打破循环。我知道这可能是由于以下行中的return语句:return JsonResponse([post.serialize() for post in posts],safe=False)
,但我如何避免这种情况?
我尝试将return语句更改为print语句,但是随后出现ValueError:
The view network.views.followingPosts didn't return an HttpResponse object. It returned None instead.
就在except
语句之前,我尝试在其中继续插入,但这没有效果。
我不太确定如何解决此问题。有什么想法吗?
def followingPosts(request,user_username):
try:
user_profile = get_object_or_404(User,username=user_username)
following_users = user_profile.get_following()
for person in following_users:
posts = Post.objects.filter(creator=person)
except Profile.DoesNotExist:
return JsonResponse({"error": "No user found."},status=404)
if request.method == "GET":
return JsonResponse([post.serialize() for post in posts],safe=False)
else:
return JsonResponse({
"error": "GET request required."
},status=400)
解决方法
作为@quamrana,我认为该循环实施得很好,只是您仅存储上次循环运行的帖子。这是更正:
def followingPosts(request,user_username):
try:
user_profile = get_object_or_404(User,username=user_username)
following_users = user_profile.get_following()
posts = list()
for person in following_users:
posts += Post.objects.filter(creator=person)
except Profile.DoesNotExist:
return JsonResponse({"error": "No user found."},status=404)
if request.method == "GET":
return JsonResponse([post.serialize() for post in posts],safe=False)
else:
return JsonResponse({
"error": "GET request required."
},status=400)
此外,在尝试子句中保留一行也是一个好习惯。因此,
def followingPosts(request,username=user_username)
except Profile.DoesNotExist:
return JsonResponse({"error": "No user found."},status=404)
if request.method == "GET":
following_users = user_profile.get_following()
posts = list()
for person in following_users:
posts += Post.objects.filter(creator=person)
return JsonResponse([post.serialize() for post in posts],status=400)