Har*_*mer 3 django url-rewriting python-2.7
我正在研究django应用程序,我有如下应用程序的基本URL:
127.0.0.1:8000/myblog/page
Run Code Online (Sandbox Code Playgroud)
其中127.0.0.1:8000是基本URL,myblog是应用程序名称,页面是页面名称.所以我的要求是在不改变应用程序内部代码的情况下将url更改为这样的内容:
127.0.0.1:8000/username/page
Run Code Online (Sandbox Code Playgroud)
基本上我想在URL中用用户名更改App名称.我已经尝试过在这个 SO问题中给出的解决方案.但它并没有多大帮助.
您可以将用户名传递给urlregexp args并从request类获取请求用户:
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})
Run Code Online (Sandbox Code Playgroud)
网址:
url(r'^(?<username>\w+)/page/$', views.user_page, name='user_page')
Run Code Online (Sandbox Code Playgroud)
注意: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} )
Run Code Online (Sandbox Code Playgroud)
网址:
url(r'^page/$', views.user_page, name='user_page')
Run Code Online (Sandbox Code Playgroud)
现在它根据请求用户返回数据,或者None用户未经过身份验证
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |