首页 > 解决方案 > Django - 从页面重定向传递参数

问题描述

我刚开始使用 Python 和 Django,希望在成功注册表单后将用户重定向到主页,头部按摩更改为“您已成功注册”。我的代码在重定向后不更改按摩是:

网址.py:

urlpatterns = [
    path('', IndexView.as_view(), name = 'index'),
    path('register/', views.register, name = 'register'),
]

视图.py:

class IndexView(TemplateView):
template_name = 'first_ap/index.html'
def get_context_data(self, *args, **kwargs): 
    t_user = 'Hello my friend'
    context = {
        'viva':t_user
    }
    return context

def register(request):
if request.method == "POST":
    form = RegForm(request.POST)
    if form.is_valid():
        new_user = form.save(commit=False)
        new_user.set_password(form.cleaned_data['password'])
        new_user.save()
        return redirect('index')
else:
    form = RegForm()
    return render(request, 'first_ap/register.html', {'form': form})

在 html 文件中,我输入:

<h1>{{ viva }}!</h1>

从“你好我的朋友”重定向到“您已成功注册”后,我应该如何修改代码以更改上下文?我尝试了几种选择,但都失败了。

标签: djangoredirectparameters

解决方案


解决方案

from django.urls import reverse

class IndexView(TemplateView):
    template_name = 'first_ap/index.html'
    def get_context_data(self, *args, **kwargs):
        # request.GET contains the query parameters, check if `first_visit` is 1 or not
        is_first_visit = self.request.GET.get('first_visit', 0) == "1"

        if is_first_visit is False:
            t_user = 'Hello my friend' 
        else:
            t_user = 'You have successfully registered'
        context = {
            'viva': t_user
        }
        return context

def register(request):
    if request.method == "POST":
        form = RegForm(request.POST)
        if form.is_valid():
            new_user = form.save(commit=False)
            new_user.set_password(form.cleaned_data['password'])
            new_user.save()

            # add a query parameter to indicate user's first visit
            return redirect(reverse('index') + "?first_visit=1")
    else:
        form = RegForm()
        return render(request, 'first_ap/register.html', {'form': form})
  • 注册成功后在重定向调用中添加一个查询参数first_visit为1(随机值)。
  • self.request.GET使用dict访问查询参数
  • 根据值更改上下文值first_visit

推荐阅读