【发布时间】:2016-11-02 14:55:16
【问题描述】:
简单的问题,我是 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/)
“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 调用!
更新 感谢丹尼尔,我也这样修复它:
return redirect('/SSO_Management_POC/userfilt')
但它仍然给我同样的问题:
return render(request,'/SSO_Management_POC/userfilt')
让我去http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/
非常感谢各位!
【问题讨论】:
-
我不确定我是否理解您的问题...如果您希望表单从 URL A 重定向到 URL B,您要么必须将 URL B 设为您的目标 (
action="...")表单(在这种情况下,视图 B 必须处理表单)或使用 post 到 A 并重定向到 B,但您不能使用 POST 请求加载 URL B。您更喜欢哪个选项? -
如果我使用该操作,它总是将我带到127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/… 而不是 /SSO_Management_POC/userfilt.html 它总是将我的文本附加到我的最后一页,表单一!
标签: python django forms redirect post