我有两个视图,一个用于创建项目,另一个用于生成另一个对象实例的全局视图。在此视图中,我有一个表单,我想要的是在处理后重定向到上一页观点。
基本上:
def view1(request):
if request.method == 'GET':
#heavy processing for the context
return HttpResponse(template.render(context))
def view2(request):
if request.method == 'POST':
# Simply add an element
return view1(request)
这就是我想做的事。问题是,正如您所看到的,该方法与view1到view2不同。我无法使用redirect
因为视图1数据的繁重处理无法完成(我猜)。
有人知道如何将我的POST请求转换为GET并添加参数?
谢谢!
答案 0 :(得分:3)
您也可以使用它:
def view(request):
if request.method == "POST"
#add the element
#heavy processing for the context
这里如果方法是post,如果post可用,它将转到post方法,并且你可以在你想要的处理中使用post周长
希望它有用,请投票
或者您可以使用:
from django.views.generic.base import View
class view(View):
def get(self, request, *args, **kwargs ):
#heavy processing for the context
def post(self, request, *args, **kwargs):
#add the element
当你用post方法调用上面的url时,它会转到post,而对于其他情况,它会加载get
答案 1 :(得分:1)
是什么让您认为view1
中的数据处理不会在重定向上完成? HttpRedirectResponse
及其快捷方式redirect()
只会为用户的浏览器提供302
HTTP响应代码,表明浏览器应该对指定的网址发出新请求并显示该网页而不是当前页面。
在成功发出POST请求后,总是进行重定向是一种很好的做法。否则,如果用户刷新原始页面,则POST请求中的数据将被发送和处理两次。使用重定向将重置所有POST数据,并在成功请求后防止向用户显示重复条目或错误消息。
要传递参数,只需将其添加到重定向网址,就像使用任何GET参数一样:
from django.http import QueryDict
parameters = QueryDict(foo='bar', myOtherVar='something_else')
url = '%s?%s' % (reverse('my_view_name'), parameters.urlencode())
return redirect(url)
答案 2 :(得分:0)
在这种情况下,您可以使用request.REQUEST:https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.REQUEST
但这似乎不太好主意,因为它会在django 1.7中被弃用。您不应该将GET参数作为POST传递给另一个视图,最好在booth视图中使用POST。