Python,Django 1.7:将所有URL重定向到单个控制器

时间:2015-03-02 14:22:27

标签: python regex django url model-view-controller

我们的基本网址为so.com 因此,如果URL以abc开头,例如

so.com/abc/
so.com/abc/123
so.com/abc?newtab=123
so.com/abc#123
so.com/abc/123?tab=new
...

然后,所有这些URL模式都应该转到Class Abc

myapp/urls.py 
...
url(r'^abc[a-zA-Z0-9=#_\?\-/]+$',views.Abc.as_view(),name='abc')

的myapp / myviews / abc.py

class Abc(View):
   def get(self,request):
    ...
   def foo(user_id):
   ...
   def bar(post_id):
   ...

在函数get(self,request):中如何在请求的abc之后获取所有内容。 e.g。

so.com/abc/xyz => /xyz
so.com/abc#123 => 123
so.com/abc?tab=new => ?tab=new 
 so.com/abc/123?tab=new => tab = new and 123 

在abc之后添加#123时,它会自动转换为abc/#123

如何开展这项工作?

我见过很多问题,但没有帮助。

Django Get Absolute URL

What is a "slug" in Django?

How to get the current URL within a Django template?

...

1 个答案:

答案 0 :(得分:1)

首先,您无法获得#参数。这不会发送到服务器,请阅读更多here

解析so.com/abc/xyz => /xyzso.com/abc?tab=new => ?tab=new

url(r'^abc/?$',views.Abc.as_view(),name='abc')
url(r'^abc/(?P<param>\w+)/?$',views.Abc.as_view(),name='abc')

class Abc(View):

    def get(self,request,param=None):
        print param # in param you get /xyz
        tab = request.GET["tab"] # here you get ?tab=new