2011-12-13 48 views
0

我准备将旧的经典ASP站点移动到新的Django系统。作为举措的一部分,我们必须设置一些旧的URL来指向新的URL。Django URLConf奇怪字符重定向

例如, http://www.domainname.com/category.asp?categoryid=105应该301 http://www.domainname.com/some-category/

也许我正则表达式是不是有点傻,但是在这个例子中,我包括在我的URLconf这样的: (r'^asp/category\.asp\?categoryid=105$', redirect_to, {'url': '/some-category/'}),

我的想法是,我不得不逃避.?,但由于某些原因,当我去测试它时,它不会重定向到/some-category/,它只是输入404的URL。

我做错了吗?有没有更好的办法?

回答

2

要详细说明Daniel Roseman's answer,查询字符串不是URL的一部分,所以您可能需要编写一个视图函数,该函数将从查询字符串中获取类别并进行适当的重定向。你可以有一个像网址:

(r'^category\.asp', category_redirect), 

像一个视图功能:(改为自己的口味和需求,当然)

def category_redirect(request): 
    if 'categoryid' not in request.GET: 
     raise Http404 
    cat_id = request.GET['category'] 
    try: 
     cat = Category.objects.get(old_id=cat_id) 
    except Category.DoesNotExist: 
     raise Http404 
    else: 
     return HttpResponsePermanentRedirect('/%s/' % cat.slug) 

+0

就像一个魅力。谢谢! – JEEND0 2011-12-13 20:04:23

0

?之后的所有内容都不是URL的一部分。它是GET参数的一部分。