一个简单的问题,我是Django和Pyhton新手...

我正在尝试做一件非常简单的事情,至少我是这样认为的:

我有一个小表格:

<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")


我这样做是这样,但问题是该URL尚未重置..和这样的结果,

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

结果是我在该页面上执行的每个操作均无法正常运行,因为它不再被映射

我的意思是,应该是:


http://127.0.0.1:8000/SSO_Management_POC/userfilt/


而是


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


为了更好地解释我的问题。

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

“ GET / SSO_Management_POC / userfilt / HTTP / 1.1” 200 2648

然后我单击“创建用户”以调用该表单,它将带至:(http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/

“ GET / SSO_Management_POC / userfilt / insertForm / HTTP / 1.1” 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")


这是拨打的电话:

“ POST / SSO_Management_POC / userfilt / insertForm / HTTP / 1.1” 200 2648

我尝试了渲染,使用了HttpResponseRedirect等等……但是,总有这种情况发生在我用上一个调用的url上,我希望将其重置,我希望它是../ !!!

对我唯一有用的是:

return redirect("../")





这很脏
这不允许拨打POST电话!


更新
多亏了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/

非常感谢大家!

最佳答案

成功发布后,您应该始终重定向而不是渲染。做return redirect(url)是正确的做法,目前尚不清楚为什么您对此不满意。

请注意redirect can accept the name of a URL pattern,因此您可以执行return redirect('userfilt'),它将带您到正确的位置。

09-30 18:45