Redirect,网页重定向

考虑如下情况:

我们首先通过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>

这样就可以正确跳转了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值