我有一个网址:
url(r'^profile_detail/(?P<uuid>%s)/$' % uuid, ProfileDetailView.as_view(), name="profile_detail_view")
我需要将用户重定向到该视图,但我不知道如何构建网址而不对其进行硬编码,我不想这样做。
我想像:
reverse('profile_detail_view' 'profile.uuid')
我尝试了一些变化,但我没有把它弄好。我也试过args和kwargs的东西,但没有。
我该怎么做?
答案 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})