django 重定向后如何返回原页面?

wh6knrhe  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(186)

我正在建立一个需要年龄门的网页。为此,我使用Django会话。该视图检查年龄门是否已通过,否则将用户重定向回年龄门。在用户通过年龄门后,我想将他们重定向回他们来自的页面。我该怎么做?我试过使用request.META.get('HTTP_REFERER'),但没有用。我的观点是这样的:

`def main_view(request):
    if request.session.has_key('agegate'):
        random_category = random.choice(Category.objects.all())
        random_picture = random.choice(CoreImages.objects.all())

        context = {
            'image' : random_picture,
            'category' : random_category,
            'bottles': Bottle.objects.all(),
        }
        return render(request,'Academy/home.html', context)
    else:
        return redirect('/preview/agegate')`

年龄门视图看起来像这样:

def age_gate_view(request):

    next_url = request.META.get('HTTP_REFERER')
    form = AgeGateForm()
    
    if request.method == 'POST':
        form = AgeGateForm(request.POST or None)
        if form.is_valid():
            form.save()
            request.session['agegate'] = 'welcome'
            return HttpResponseRedirect(next_url)
    
    context = {
        'form':form,
    }

    return render(request,'Academy/agegate.html', context)
r6hnlfcb

r6hnlfcb1#

在Django中,有一个使用next url参数来跟踪原始url的约定。
所以,你可以这样做:

def main_view(request):
    # ...
    return redirect('/preview/agegate?next=/current-view-url/')

接下来,在age-gate视图中,您可以读取next参数的值以重定向到原始url。

def age_gate_view(request):
    next_url = request.GET.get('next')
    if next_url is None:
        # fallback to HTTP_REFERER header
        # or home page in case header is not present
        next_url = request.META.get('HTTP_REFERER', '/')
    # ...

相关问题