1

我正在尝试做这样的事情:

(r'^$', RedirectView.as_view(url='^(?P<username>\w+)/$')),

但它似乎没有将正则表达式部分解析为实际的用户名......

我已经完成了研究,但我只能找到重定向到确切 url 的示例或其他有效但仅在 Django 1.1 中有效的正则表达式示例

有人知道如何在 Django 1.5+ 中执行此操作吗?

4

3 回答 3

2

子类RedirectView,并覆盖该get_redirect_view方法。

from django.core.urlresolvers import reverse

class UserRedirectView(RedirectView):

    permanent = False

    def get_redirect_url(self, pk):
        # it would be better to use reverse here
        return '/myapp/%s/' % self.request.user.username

您将UserRedirectView在您的myapp.urls.py模块中包含以下内容:

url(r'^$', UserRedirectView.as_view(), name='myapp_index'),

最好reverse是 url 而不是/myapp/在上面的 url 中硬编码。例如,如果您要重定向到如下所示的 url 模式

url(r'^(?P<username>\w+)/$', 'myapp.view_user', name='myapp_view_user'),

然后您可以将get_redirect_url视图更改为:

    def get_redirect_url(self, pk):
        return reverse('myapp_view_user', args=(self.request.user.username,))
于 2013-05-18T18:54:06.300 回答
1

我想你需要这样的东西

(r'^(?P<username>\w+)/$', 'your_view'),

your_view在哪里

def page(request, username):
    pass

如果需要带参数的重定向,可以使用

('^(?P<username>\w+)/$', 'django.views.generic.simple.redirect_to',
 {'url': '/bar/%(username)s/'}),

更多信息在这里:

https://docs.djangoproject.com/en/1.2/ref/generic-views/#django-views-generic-simple-redirect-to 和这里:

https://docs.djangoproject.com/en/1.4/topics/http/urls/#notes-on-capturing-text-in-urls

于 2013-05-18T18:15:40.910 回答
0

你可以试试这个包https://github.com/maykinmedia/django-regex-redirects。它在我们的一些项目中使用

于 2018-03-08T15:44:21.843 回答