在 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解 django url.py 中的 Url 模式

刷新 django 中的 urls.py 缓存

Django 在我的主 url.py 中包含应用程序 url

Django之视图(views.py)

django url.py使用

6)django-实例(fbv)