Python 在本例中,如何重定向到另一个带有参数的视图?
我在这里有一个intro.html呈现视图: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
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
。实际上,我是一名医学生,目前对编程感兴趣,这意味着我是一名新手:-)。有这么多疑问是一种不好的做法;它会降低服务器的速度吗?