如何避免在for-in循环中使用return语句?

问题描述

我下面的观点只是经历一个迭代周期,然后打破循环。我知道这可能是由于以下行中的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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...