我写了一个具有以下签名的函数:
def action_handler(request, model):
此action_handler用于不同的视图,并处理此视图的操作。一个例子是删除对象。在该示例中,用户选择一些对象,选择删除动作,然后向用户呈现页面以检查他/她是否想要真正删除所选对象。这可以通过以下代码完成:
context = {
'action_name' : selected_action,
'object_list' : object_list,
}
return render_to_response("crm/object_delete_check.html", context,
context_instance=RequestContext(request))
对于出现问题的情况,我想将用户重定向到用户调用操作的视图。
因此,我想在此询问是否可以从请求对象或其他地方获取调用视图。
如果def“def action_handler(request,model):”从视图中调用“contacts(request):”那么我想将用户重定向到视图“contacts(request):”。
但是线索是我不想硬编码,因为def action_handler是从不同的视图调用的。使用简单的“返回”也是不可能的,因为我想完全回忆起这个视图。
答案 0 :(得分:3)
if goback: #goback being whatever criteria means "something went wrong"
default_back_url = "someurl_in_case_the_meta_is_messed_up"
back = request.META.get('HTTP_REFERER',default_back_url) #yeah they spelled referrer wrong
if back:
return HttpResponseRedirect(back)
else:
return HttpResponseRedirect(default_back_url)
虽然META可以伪造,但它比GET查询字符串更难伪造。
答案 1 :(得分:0)
您可以通过GET参数传递上一页网址:
/object_delete_check/?previous=/contacts/
(例如,参见contrib.auth.decorators.login_required
)