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

2024-05-14 17:53:39 发布

您现在位置:Python中文网/ 问答频道 /正文

简单的问题,我是一个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')

Url映射文件:

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

现在,当我提交表格的时候,我就想回到主页,用一个帖子来打电话,就像往常一样!

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/

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

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

“获取/单点登录管理”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

我试过render,HttpResponseRedirect等等。。。但它总是发生在我调用的url与上一个,我希望它被重置,我希望它是…/!!!

唯一对我有用的是:

return redirect("../")

但是

  1. 这太脏了
  2. 这不允许打电话!

更新 多亏了丹尼尔,我也把它修好了:

return redirect('/SSO_Management_POC/userfilt')

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

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

带我去http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/

多谢各位!


Tags: namehttpurlreturnrequesthtmlrendermanagement
2条回答

下面的代码能解决你的问题吗?

在模板中:

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

在一篇成功的文章之后,你应该总是重定向,而不是渲染。做return redirect(url)是正确的做法,但不清楚为什么你不满意。

注意redirectcan accept the name of a URL pattern,这样你就可以做return redirect('userfilt')这会把你带到正确的地方。

相关问题 更多 >

    热门问题