Django-从页面重定向传递参数

时间:2018-08-23 18:09:24

标签: django redirect parameters

我刚开始使用Python和Django,并希望在成功进行表单注册后将用户重定向到主页,其头部信息更改为“您已成功注册”。 我的重定向后没有更改提示的代码是:

urls.py:

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

views.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>

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

2 个答案:

答案 0 :(得分:0)

解决方案

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字典访问查询参数
  • 根据first_visit的值更改上下文值

答案 1 :(得分:0)

为什么不将消息保存在对象变量中?

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

  def register(request):
    if request.method == "POST":
        form = RegForm(request.POST)
        if form.is_valid():
            IndexView.text='You have registered'
            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})
相关问题