如何重写django中的基本url以在所有页面的url中添加登录用户名而不是应用程序名称?

2023-12-12

我正在开发 django 应用程序,我的应用程序的基本 url 如下:

127.0.0.1:8000/myblog/page

where 127.0.0.1:8000是基本网址并且myblog是应用程序名称和page是页面名称。 所以我的要求是将 url 更改为类似这样的内容,而不更改应用程序的内部代码:

127.0.0.1:8000/username/page

基本上我想用 URL 中的用户名更改应用程序名称。 我已经尝试过给出的解决方案this所以问题。但这并没有多大帮助。


您可以将用户名传递到url正则表达式参数并从中获取请求用户request class:
view:

def user_page(request, username):
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExists:
        raise Http404
    # or use shortcut get_object_or_404(User, username=username)
    if request.user.username != user.username:
        raise Http404
    return render(request, 'templates/user_template', {'user':user})

urls:

url(r'^(?<username>\w+)/page/$', views.user_page, name='user_page')

Note: username字段不是有效的选择,如果它不是唯一的,当您从其中获得超过一个用户时,它将产生错误User.objects.get()。更好用pk用户页面查找的字段。

但是有更简单的方法来为请求用户构建用户页面。只有一个没有关键字参数的 url,它为经过身份验证的用户响应数据:

view:

def user_page(request):
    user = None
    if request.user.is_authenticated():
        user = User.objects.get(pk=request.user.pk)
    return render(request, 'templates/user_template', {'user': user} )

urls:

url(r'^page/$', views.user_page, name='user_page')

现在它根据请求用户或返回数据None如果用户未经过身份验证

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重写django中的基本url以在所有页面的url中添加登录用户名而不是应用程序名称? 的相关文章

随机推荐