如何使用HTTP_REFERER

时间:2015-05-21 01:26:54

标签: django django-forms django-views

我有一个搜索字段,可以生成记录列表。该列表中的每条记录都有一个"编辑"在更新表单中打开记录的按钮:

#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

1 个答案:

答案 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)