在POST调用后,Django,GET参数保持在URL

时间:2016-07-01 08:33:02

标签: python django post get django-views

我是Django的新手!

我正在做一个简单的注册表单,当它提交时,它会返回一个标签到上一页,即主页面:

表单提交如下:

 <form method="post"">

它映射在urls.py:

url(r'^userfilt/insertForm/$', views.insertForm, name='insertForm')

所有urls.py文件:

app_name = 'SSO_Management_POC'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^user/$', views.user, name='user'),
    url(r'^userfilt/$', views.userfilt, name='userfilt'),
    url(r'^userfilt/insertForm/$', views.insertForm, name='insertForm'),
    #url(r'^updateForm/$', views.updateForm, name='updateForm'),
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>[0-9]+)/results/$', views.ResultsView.as_view(), name='results'),
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]

所以相关的“def”叫它:

def insertForm(request):
    if request.method == 'POST':
    #some stuff here     
    #sending the get parameter to the main page:
    return redirect('/SSO_Management_POC/userfilt/?label=User Registered!')

现在当我重定向到主页面时,我会看到类似的内容: enter image description here

现在我想继续工作,我会在输入中放一个过滤器,然后在代码下方执行搜索:

if request.method == 'POST':
        form = UserForm(data=request.POST)
        val = request.POST.get('my_textarea')
        return render(request, 'SSO_Management_POC/userfilt.html', {'top_user': TopUser.objects.filter(user_name__regex=val)})

正如你所看到的那样是一个POST调用,但问题来了,GET参数仍然存在,所以这导致enter image description here

显然我不再想要那里的标签,它应该在另一次电话后消失......

网址仍然如下:

http://127.0.0.1:8000/SSO_Management_POC/userfilt/?label=User%20Registered

现在,我知道我可以通过解决方法前端解决这个问题,但我想知道:

  1. 有什么东西不能作为操作流程吗?
  2. 我该如何解决这个问题?我哪里错了..?
  3. 我试图找一些东西来清理网址中的get参数,或者重置它,因为我认为这是更简单的方法,但我发现的唯一的东西需要花费很多代码,让你有其他的想法清理网址?
  4. 有没有其他任何Django方法可以帮助您解决这个问题,或者可能只是避免这个问题?

1 个答案:

答案 0 :(得分:1)

问题是您的action=""标记中没有form,这意味着您要发布到现有网址,包括任何查询字符串(即现有GET参数)。

只需将action=""添加到form标记,例如:

<form method="POST" action="{% url 'insertForm' %}">