我有一个搜索字段,可以生成记录列表。该列表中的每条记录都有一个"编辑"在更新表单中打开记录的按钮:
#views.py
def updateEntry(request, id):
if request.method == 'POST':
form = PostEntryForm(request.POST, request.FILES, instance = PostEntry.objects.get(pk = id))
if request.POST.get('delete'):
instance = PostEntry.objects.get(pk=id)
instance.delete()
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
if form.is_valid():
form.save()
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
else:
form = PostEntryForm(instance = PostEntry.objects.get(pk = id))
tpl = 'assetpost/postupdate_form.html'
variables = RequestContext(request, {'form':form })
return render_to_response(tpl, variables)
模板:
#postupdate_form.html:
<div class="container tmarg">
<div class="row">
<form name="PostEntryForm" action="" method="POST" enctype="multipart/form-data">{% csrf_token %}
<div class="col-md-6">
<div class="well">
{{ form|crispy }}
</div>
</div>
<input type="submit" name="delete" value="Delete" />
<input type="submit" value="Submit" />
</form>
</div>
</div>
和基本网址:
urlpatterns = patterns('',
url(r'^newpostpage/', PageCreate.as_view(), name='postpage'),
url(r'^create-entry/', createEntry, name='createEntry'),
url(r'^updatepage/(?P<pk>\w+)/$', PageUpdate.as_view(), name='update_page'),
url(r'^update-entry/(?P<id>\w+)/$', updateEntry, name='updateEntry'),
url(r'^multipost/', multipost, name='multipost'),
)
建议使用&#34; request.META.get(&#39; HTTP_REFERER&#39;)&#34;在视图代码中的声明,我试图产生的行为是:
搜索参数中的用户类型;获取记录列表;点击单个记录并以更新形式打开它;修改或删除它 - 并重定向回到他来的列表。它是我遇到困难的重定向。 按照现在的情况,点击&#34;删除&#34;或者&#34;提交&#34;在更新表单中执行删除或修改记录,但然后抛出匹配查询不存在。&#34;尝试重定向时出错。 我已尝试在表单操作属性中使用HTTP_REFERER - 并且它会重定向回列表 - 但在对记录执行任何操作之前,保持数据库不变。有人能指出我纠正这个问题吗?
使用Django 1.8和Python 3.4
答案 0 :(得分:1)
这实际上很容易解决。我确信有很多方法可以做到,但我的方法如下:
我首先在表单中包含了一个隐藏字段,并为其指定了名称属性“URL”:
<div style="display:hidden;">
<input type="text" name="URL" id="refURL" />
</div>
然后我使用了一些js来捕获引用网址并将其分配给隐藏的表单字段:
<script type="text/javascript">
var refURL=document.referrer;
var target=document.getElementById('refURL');
target.value=refURL
</script>
最后我修改了我的视图以从POST数据中提取URL并在我的HTTP响应中使用它:
#views.py
def updateEntry(request, id):
if request.method == "POST":
...
...
...
if form.is_valid():
URL = request.POST.get('URL')
form.save()
return HttpResponseRedirect(URL)