【问题标题】:Pass uuid to reverse() to construct url将 uuid 传递给 reverse() 以构造 url
【发布时间】:2015-07-02 01:06:23
【问题描述】:

我有一个网址:

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

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

我想到了类似的东西:

reverse('profile_detail_view' 'profile.uuid')

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

我该怎么做?

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    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&lt;uuid&gt;[\d\-]+) 中的命名正则表达式匹配

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

    【讨论】:

    • 该死,我很接近 :) 我在尝试时忘记将 uuid 参数名称放在 kwargs 中的引号中......我有这样的:...... kwargs={ uuid: profile .uuid} ...
    • 我只想在这里添加一些 uuid 的模式类似于[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}
    • @AliBZ 也可以简化为 (?P&lt;uuid&gt;[0-9A-Za-z\-]+) just my $.02
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 2011-09-24
    • 2012-01-15
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多