将uuid传递给reverse()以构造url

时间:2015-04-23 17:20:40

标签: django django-urls

我有一个网址:

url(r'^profile_detail/(?P<uuid>%s)/$' % uuid, ProfileDetailView.as_view(), name="profile_detail_view")

我需要将用户重定向到该视图,但我不知道如何构建网址而不对其进行硬编码,我不想这样做。

我想像:

reverse('profile_detail_view' 'profile.uuid')

我尝试了一些变化,但我没有把它弄好。我也试过args和kwargs的东西,但没有。

我该怎么做?

1 个答案:

答案 0 :(得分:7)

<强> urls.py
urls.py中,您只定义了模式 - 匹配时 - 调用给定视图。已匹配的内容将作为命名参数传递给视图,例如

url(
    r'^profile_detail/(?P<uuid>[\d\-]+)/$', 
    ProfileDetailView.as_view(), 
    name="profile_detail_view"
)

此模式将匹配数字(0-9)和连字符(-)(取决于uuid,您可以在分组和长度方面加强正则表达式。)

查看
然后,您的视图负责查找此uuid所属的用户(如果未找到用户,则会引发错误),例如

class ProfileDetailView(View):
    def get(self, request, uuid):
        try:
            user = User.objects.get(uuid=uuid)
        except User.DoesNotExist:
            raise Http404  # or whatever else is appropriate

        # ...

<强>逆转
通过将所有必要的内容传递给reverse函数来反转视图。 kwargs中的键需要与您的网址格式(?P<uuid>[\d\-]+)中的命名正则表达式匹配

reverse('profile_detail_view', kwargs={'uuid': profile.uuid})