Django,从另一个视图渲染视图(调用特定的URL)

时间:2016-06-30 13:16:54

标签: python django forms redirect post

简单的问题,我是Django和Pyhton noob ......

我试图做一件非常简单的事情,至少我是这么认为的:

我有一点形式:

<form action="#" method="post">
    {% csrf_token %}
    <label>Company Number:</label>
    <input type="text" name="company" placeholder=""/><br>
    <input type="submit" id="register value=" OK" />
</form>

这个映射如下:

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

现在提交此表单后,我想回到主视图:

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

网址映射文件:

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 userfilt(request):
    if request.GET.get('create'):
        return HttpResponseRedirect('insertForm')

    if request.GET.get('update'):
        print request.GET.get('pk')
        return render(request, 'SSO_Management_POC/updateForm.html')

    if request.method == 'POST':
        form = UserForm(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)})
    else:
        print '4'
        return render(request, 'SSO_Management_POC/userfilt.html')

现在,当我提交表单时,正在杀死我的电话发生了,我只想回到主页,用POST来调用它,就像总是那样!

return render(request, "SSO_Management_POC/userfilt.html")

我是这样做的,但问题是该网址尚未重置..结果如下,

http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/#

结果是我在该页面上进行的每项操作都不起作用,因为它不再映射

我的意思是,它应该是:

而是

试图更好地解释我的问题..

我转到主页面(http://127.0.0.1:8000/SSO_Management_POC/userfilt/

&#34; GET / SSO_Management_POC / userfilt / HTTP / 1.1&#34; 200 2648

然后我点击创建用户来调用表单,它将我带到:(http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/

&#34; GET / SSO_Management_POC / userfilt / insertForm / HTTP / 1.1&#34; 200 1549

比我提交表单,我想回到主页,这里有我不明白的事情: 它把我带到了这里

http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/#

但我想去这里

http://127.0.0.1:8000/SSO_Management_POC/userfilt

这又是代码:

return render(request, "SSO_Management_POC/userfilt.html")

这是致电:

&#34; POST / SSO_Management_POC / userfilt / insertForm / HTTP / 1.1&#34; 200 2648

我尝试使用渲染,使用HttpResponseRedirect等等......但总是发生了我用前一个调用的网址,我希望它被重置,我希望它是../ !! !

唯一对我有用的是:

return redirect("../")

但是

  1. 这很脏
  2. 这不允许拨打POST电话!
  3. 更新 感谢Daniel,我也解决了这个问题:

    return redirect('/SSO_Management_POC/userfilt')
    

    但它仍然给我同样的问题:

    return render(request,'/SSO_Management_POC/userfilt')
    

    转到http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/

    非常感谢大家!

2 个答案:

答案 0 :(得分:1)

成功发布后,您应始终重定向,而不是呈现。做return redirect(url)是正确的做法,并且不清楚为什么你对此不满意。

请注意redirect can accept the name of a URL pattern,这样您就可以return redirect('userfilt')将您带到正确的位置。

答案 1 :(得分:0)

以下代码是否解决了您的问题?

在你的模板中:

<form action="{% url 'userfilt' %}" method="post">