我正在开发 django 应用程序,我的应用程序基本 url 如下:
127.0.0.1:8000/myblog/page
其中 127.0.0.1:8000 是基本网址,myblog 是应用名称,page 是页面名称。 所以我的要求是在不更改应用程序内部代码的情况下将 url 更改为这样的内容:
127.0.0.1:8000/username/page
基本上我想用 URL 中的用户名更改应用程序名称。 我已经尝试了 this 中给出的解决方案所以问题。但这并没有太大帮助。
最佳答案
您可以将用户名传递到 url
regexp args 并从 request
类获取请求用户:
观点:
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})
网址:
url(r'^(?<username>\w+)/page/$', views.user_page, name='user_page')
注意:username
字段不是有效选择,如果它不是唯一的,当你从 User.objects.get()
获取多个用户时会产生错误.更好地使用 pk
字段进行用户页面查找。
但是有一种更简单的方法可以为请求用户构建用户页面。只有一个不带关键字参数的 url,它为经过身份验证的用户响应数据:
查看:
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} )
网址:
url(r'^page/$', views.user_page, name='user_page')
现在它根据请求用户返回数据,如果用户未通过身份验证,则返回 None
关于django - 如何在 django 中重写基本 url 以在所有页面的 url 中添加登录用户名而不是应用程序名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781442/