在 Django 中,我如何编写一个 url.py,其中 users/self/ 与 users/<pk>/ 相同,其中 <pk> 是您登录的用户 pk?
Posted
技术标签:
【中文标题】在 Django 中,我如何编写一个 url.py,其中 users/self/ 与 users/<pk>/ 相同,其中 <pk> 是您登录的用户 pk?【英文标题】:In Django, how do I write a url.py where users/self/ is the same as users/<pk>/, where <pk> is your logged in user pk? 【发布时间】:2012-04-08 14:58:12 【问题描述】:我正在尝试写一个url.py
,其中我对users
有一个简单的看法
urlpatterns = patterns( 'doors.view',
url( r'^users/$' , 'users_list' , name = 'users_list' ),
url( r'^users/(?P<pk>\d+)/$', 'users_detail', name = 'users_detail' ),
url( r'^users/self/$' , # do some sort of redirect here ),
)
重定向的问题是我不知道url.py
中登录用户的pk
。在view.py
中,我显然会做一个@login_required
才能访问users/self/
。
也许我做错了?你们建议我做什么?
【问题讨论】:
【参考方案1】:您还可以在 urls.py 中执行以下操作:
urlpatterns = patterns( 'doors.view',
url( r'^users/$' , 'users_list' , name = 'users_list' ),
url( r'^users/(?P<pk>\d+)/$', 'users_detail', name = 'users_detail' ),
url( r'^users/self/$' , 'users_detail', 'pk'='self' ),
)
然后在views.py中:
if pk == 'self':
user = request.user
else:
user = User.objects.get(pk=pk)
【讨论】:
【参考方案2】:我的建议(不确定是否是最简单的)是创建一个新视图,您可以在其中获取用户的 pk,然后调用 users_detail
视图:
@login_required
def self_detail(request):
return users_detail(request, request.user.pk)
【讨论】:
【参考方案3】:使用来自request.user.pk
的值创建一个调用user_detail()
的视图。
【讨论】:
以上是关于在 Django 中,我如何编写一个 url.py,其中 users/self/ 与 users/<pk>/ 相同,其中 <pk> 是您登录的用户 pk?的主要内容,如果未能解决你的问题,请参考以下文章