考虑如下情况:
我们首先通过GET方法进行了一次查询,显式结果。在结果中给出了对于各个对象的操作接口,比如可以“修改”,“删除”等的超级链接。
通常,我们可以让链接在新的窗口中打开,然后手动关闭窗口。但是对于某些受限环境,可能不可以允许打开新的窗口。那么就要用到“重定向”了。
在request对象中有个META属性,其中包含了很多请求相关的子属性。其中有一个叫做REQUEST_URI。这个参数包含了当前网页的请求(REQUEST)资源地址,我们可以在超链接中加入这个地址请求程序进行处理。
例如,在template中写下如下代码:
<a href='/app/view/?next={{ request.META.REQUEST_URI }}'>Some action</a>
在/app/view/中,我们只要处理完之后重定向到next指向的地址就可以了。偷一段limodou的代码:
def next_url(request, url, direct_string='next'):
next_url = request.REQUEST.get(direct_string, '')
if not next_url:
next_url = url
return next_url
def next_redirect(request, url, direct_string='next'):
return HttpResponseRedirect(next_url(request, url, direct_string))
当然,我觉得这样会增加网页大小,如果考虑到这个因素比较重要,那么我们可以采用javascript动态加上这个参数就可以了。后面再不上这个javascript函数。
事实证明,不仅仅是文件大小的问题,还有非法字符的问题。如果按照上面那样写,不带GET参数的URL是没有问题的,但是有GET参数的就不正确了。因此,必须使用javascript来搞定了。
Javascript代码(用来判断点击的是哪个链接,并构造新的URL):
function action(e){
var targ
if (!e) var e = window.event
if (e.target) targ = e.target
else if (e.srcElement) targ = e.srcElement
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode
var link
link=targ.href
targ.href=link+"?next="+escape(document.getElementById("next").value)
}
注意其中使用的是escape函数,不能使用encodeURI,因为那样没有转义非法字符,还是没有用。
然后必须保证被重定向的URL被传递到javacript中去,加上一个hidden的input:
<input type="hidden" id="next" value="{{request.META.REQUEST_URI}}">
最后在链接上激发事件:
我们首先通过GET方法进行了一次查询,显式结果。在结果中给出了对于各个对象的操作接口,比如可以“修改”,“删除”等的超级链接。
通常,我们可以让链接在新的窗口中打开,然后手动关闭窗口。但是对于某些受限环境,可能不可以允许打开新的窗口。那么就要用到“重定向”了。
在request对象中有个META属性,其中包含了很多请求相关的子属性。其中有一个叫做REQUEST_URI。这个参数包含了当前网页的请求(REQUEST)资源地址,我们可以在超链接中加入这个地址请求程序进行处理。
例如,在template中写下如下代码:
<a href='/app/view/?next={{ request.META.REQUEST_URI }}'>Some action</a>
在/app/view/中,我们只要处理完之后重定向到next指向的地址就可以了。偷一段limodou的代码:
def next_url(request, url, direct_string='next'):
next_url = request.REQUEST.get(direct_string, '')
if not next_url:
next_url = url
return next_url
def next_redirect(request, url, direct_string='next'):
return HttpResponseRedirect(next_url(request, url, direct_string))
当然,我觉得这样会增加网页大小,如果考虑到这个因素比较重要,那么我们可以采用javascript动态加上这个参数就可以了。后面再不上这个javascript函数。
事实证明,不仅仅是文件大小的问题,还有非法字符的问题。如果按照上面那样写,不带GET参数的URL是没有问题的,但是有GET参数的就不正确了。因此,必须使用javascript来搞定了。
Javascript代码(用来判断点击的是哪个链接,并构造新的URL):
function action(e){
var targ
if (!e) var e = window.event
if (e.target) targ = e.target
else if (e.srcElement) targ = e.srcElement
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode
var link
link=targ.href
targ.href=link+"?next="+escape(document.getElementById("next").value)
}
注意其中使用的是escape函数,不能使用encodeURI,因为那样没有转义非法字符,还是没有用。
然后必须保证被重定向的URL被传递到javacript中去,加上一个hidden的input:
<input type="hidden" id="next" value="{{request.META.REQUEST_URI}}">
最后在链接上激发事件:
<a href="/inquiry/{{obj.id}}/edit/" onClick="action(event)">修改</a>
这样就可以正确跳转了。