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

dnm*_*nmh 4 django django-urls

我有一个网址:

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

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

我想像这样:

reverse('profile_detail_view' 'profile.uuid')
Run Code Online (Sandbox Code Playgroud)

我尝试了一些变化,但我没有做对.我也试过args和kwargs的东西,但没有.

我该怎么做?

sth*_*hzg 7

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

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

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

view
然后,您的视图负责查找其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

        # ...
Run Code Online (Sandbox Code Playgroud)

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

reverse('profile_detail_view', kwargs={'uuid': profile.uuid})
Run Code Online (Sandbox Code Playgroud)

  • 我只想在这里添加一些东西,uuid的模式就像`[\ w] {8} - [\ w] {4} - [\ w] {4} - [\ w] {4} - [\ w] {12 }`. (2认同)