将 uuid 传给 reverse() 构造 url

Pass uuid to reverse() to construct url

我有一个 url:

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

我需要将用户重定向到该视图,但我不知道如何在不硬编码的情况下构建 url,我不想这样做。

我想是这样的:

reverse('profile_detail_view' 'profile.uuid')

我尝试了一些变体,但我没有做对。我也尝试过使用 args 和 kwargs,但没有。

我该怎么做?

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 中的键需要与 url 模式中的命名正则表达式相匹配 (?P<uuid>[\d\-]+)

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