如何将POST数据发送到反向URL

时间:2013-11-02 07:10:58

标签: python django python-2.7 http-post

我有HttpResponseRedirect()函数构造了所需的url:

我的create观点:

def create(request):
    entry = Char_field(field=request.POST['record'])
    entry.save()
    return HttpResponseRedirect(reverse('db:index_page',kwargs={'redirected':'true'}))

HttpResponseRedirect()重定向到的视图是:

def index(request):
    redirected = False
    template= 'app/index.html'
    try:
        if request.POST['redirected'] is 'true':
            redirected = True
    except:
        pass
    return render(request,template,{'redirected':redirected})

但是它会返回错误:

NoReverseMatch at /app/create/
Reverse for 'index_page' with arguments '()' and keyword arguments '{'redirected': 'true'}' not found.

urls.py:

urlpatterns = patterns('',
    url(r'^$',views.index,name='index_page'),
    url(r'^get_record/$',views.get_record,name='get_record'),
    url(r'^create/$',views.create_html,name='create_path'),
    url(r'^add/$',views.create,name='add_record')
)

为什么会这样,是否可以通过POST函数将index_page数据发送到reverse()视图?

1 个答案:

答案 0 :(得分:2)

这个问题实际上与POST数据无关。您只是尝试使用参数进行反转,但index_page的网址不会使用参数。无论您是否想要POST到该URL,都是如此。

然后,当然,你实际POST到该URL,你只需返回HttpResponseRedirect,它执行302重定向。

我不确定您认为在POST中需要此参数的原因。如果你不想把它放在URL模式中,为什么不只是在GET参数中呢?

url = reverse('db:index_page') + '?redirected=true'
return HttpResponseRedirect(url)

并在接收视图中:

redirect = request.GET.get('redirected')