Python 在本例中,如何重定向到另一个带有参数的视图?

Python 在本例中,如何重定向到另一个带有参数的视图?,python,django,redirect,Python,Django,Redirect,我在这里有一个intro.html呈现视图: def home(request): user = request.user small = user.username.title() cases = Case.objects.filter(users=user).order_by('-english') groups = user.groups.all() allgroups = Group.objects.all() suggestgroups

我在这里有一个intro.html呈现视图:

def home(request):
    user = request.user
    small = user.username.title()
    cases = Case.objects.filter(users=user).order_by('-english')
    groups = user.groups.all()
    allgroups = Group.objects.all()
    suggestgroups = set(allgroups).difference(set(groups))
    allusers = User.objects.all().exclude(username=user.username)

    if not user.is_superuser:
        user_ex = UserEx.objects.get(user=request.user)
        friendlist = FriendList.objects.get(user=user_ex)
        friends = friendlist.friends.all().exclude(username=user.username)
        friendrequest = FriendReqRecList.objects.get(user=user_ex)
        friendrequestsent = FriendReqSentList.objects.get(user=user_ex)
        friendrequests = friendrequest.friend_rec_requests.all().exclude(username=user.username)
        friendrequestsents = friendrequestsent.friend_sent_requests.all().exclude(username=user.username)
        nonfriends = set(allusers).difference(set(friends))
        return render(request, 'intro.html',
                      {'allusers': allusers,
                       'cases': cases,
                       'friendrequests': friendrequests,
                       'friendrequestsents': friendrequestsents,
                       'friends': friends,
                       'groups': groups,
                       'nonfriends': nonfriends,
                       'small' : small,
                       'suggestgroups': suggestgroups})
    return render(request, 'intro.html', {'suggestgroups': suggestgroups,
                                          'cases': cases,
                                          'groups': groups,
                                          'small' : small})
我有另一个共享视图,它将朋友和组添加到intro.html(更改只是额外的两个参数,sendfriends和sendgroups)

第二个视图还使用两个额外的参数(sendfriends和sendgroups)呈现intro.html。但是我想遵守不要重复自己的(DRY)规则,并在这里使用redirect()。如何通过共享视图传递这两个参数并重定向到主视图?

这是怎么回事:

def home(request):
    return render_intro(request)


@login_required
def share(request):
    return render_intro(request, is_share=True)


def render_intro(request, is_share=False):
    context = intro_context(request.user, is_share)
    return render(request, 'intro.html', context)


def intro_context(user, is_share=False):
    small = user.username.title()
    cases = Case.objects.filter(users=user).order_by('-english')
    groups = user.groups.all()
    allgroups = Group.objects.all()
    suggestgroups = set(allgroups).difference(set(groups))
    allusers = User.objects.all().exclude(username=user.username)

    if user.is_superuser:
        return {'suggestgroups': suggestgroups,
                'cases': cases,
                'groups': groups,
                'small' : small}

    user_ex = UserEx.objects.get(user=user)
    friendlist = FriendList.objects.get(user=user_ex)
    friends = friendlist.friends.all().exclude(username=user.username)
    friendrequest = FriendReqRecList.objects.get(user=user_ex)
    friendrequestsent = FriendReqSentList.objects.get(user=user_ex)
    friendrequests = friendrequest.friend_rec_requests.all().exclude(username=user.username)
    friendrequestsents = friendrequestsent.friend_sent_requests.all().exclude(username=user.username)
    nonfriends = set(allusers).difference(set(friends))

    context = {'allusers': allusers,
               'cases': cases,
               'friendrequests': friendrequests,
               'friendrequestsents': friendrequestsents,
               'friends': friends,
               'groups': groups,
               'nonfriends': nonfriends,
               'small' : small,
               'suggestgroups': suggestgroups}

    if is_share:
        sendgroups = groups
        sendfriends = friendlist.friends.all().exclude(username=user.username)
        context.update({'sendfriends': sendfriends,
                        'sendgroups': sendgroups})

    return context
那么这个呢:

def home(request):
    return render_intro(request)


@login_required
def share(request):
    return render_intro(request, is_share=True)


def render_intro(request, is_share=False):
    context = intro_context(request.user, is_share)
    return render(request, 'intro.html', context)


def intro_context(user, is_share=False):
    small = user.username.title()
    cases = Case.objects.filter(users=user).order_by('-english')
    groups = user.groups.all()
    allgroups = Group.objects.all()
    suggestgroups = set(allgroups).difference(set(groups))
    allusers = User.objects.all().exclude(username=user.username)

    if user.is_superuser:
        return {'suggestgroups': suggestgroups,
                'cases': cases,
                'groups': groups,
                'small' : small}

    user_ex = UserEx.objects.get(user=user)
    friendlist = FriendList.objects.get(user=user_ex)
    friends = friendlist.friends.all().exclude(username=user.username)
    friendrequest = FriendReqRecList.objects.get(user=user_ex)
    friendrequestsent = FriendReqSentList.objects.get(user=user_ex)
    friendrequests = friendrequest.friend_rec_requests.all().exclude(username=user.username)
    friendrequestsents = friendrequestsent.friend_sent_requests.all().exclude(username=user.username)
    nonfriends = set(allusers).difference(set(friends))

    context = {'allusers': allusers,
               'cases': cases,
               'friendrequests': friendrequests,
               'friendrequestsents': friendrequestsents,
               'friends': friends,
               'groups': groups,
               'nonfriends': nonfriends,
               'small' : small,
               'suggestgroups': suggestgroups}

    if is_share:
        sendgroups = groups
        sendfriends = friendlist.friends.all().exclude(username=user.username)
        context.update({'sendfriends': sendfriends,
                        'sendgroups': sendgroups})

    return context

两个函数中的代码相同吗?是的,唯一的区别是第二个函数中的两个附加参数。如果你仔细看你的问题。它们具有完全相同的参数:-)sendgroups和sendfriends是新的:-)这两个函数中的代码相同吗?是的,唯一的区别是第二个函数中的两个附加参数。如果仔细查看您的问题。它们有完全相同的参数:-)sendgroups和sendfriends是新的:-)它遵守DRY规则,但我们不能简单地用django的redirect()方法处理它吗?比如:redirect('handler:home',sendgroups=sendgroups,sendfriends=sendfriends),它看起来不像是重定向作业。这个答案看起来不错。真正的问题在于您运行的所有查询。我建议您在模型和查询中发布另一个问题,并询问是否有简化的方法。
重定向
用于重定向到另一个页面,即客户端将收到HTTP状态302并转到您通知的重定向视图。在您的例子中,您正在递增上下文并始终返回相同的视图,
intro
。实际上,我是一名医学生,目前对编程感兴趣,这意味着我是一名新手:-)。有这么多疑问是一种不好的做法;它会降低服务器的速度吗?它遵守DRY规则,但是我们不能简单地用django的redirect()方法来处理它吗?比如:redirect('handler:home',sendgroups=sendgroups,sendfriends=sendfriends),它看起来不像是一个重定向作业。这个答案看起来不错。真正的问题在于您运行的所有查询。我建议您在模型和查询中发布另一个问题,并询问是否有简化的方法。
重定向
用于重定向到另一个页面,即客户端将收到HTTP状态302并转到您通知的重定向视图。在您的例子中,您正在递增上下文并始终返回相同的视图,
intro
。实际上,我是一名医学生,目前对编程感兴趣,这意味着我是一名新手:-)。有这么多疑问是一种不好的做法;它会降低服务器的速度吗?