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

标签 django python-2.7 url-rewriting

我正在开发 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/

相关文章:

python - 为什么 django 会在新创建的对象上给我一个 ObjectDoesNotExist 错误?

python - 使用 nltk pos 标记器标记单个单词而不是单词标记每个字母

python - 在 Python 中搜索列表中的元素

c# - 为什么 RewritePath 会更改浏览器 Url?

logging - 处理重写规则后的 Haproxy 日志记录最终路径

html - 在使用html表单上传的Django中读取Excel文件

python - Django:删除关系末尾时未触发 m2m_changed

python - Django ModelForm 没有指定模型类

python - pyodbc 与 DB2 的连接

mysql - URL 重写 PHP 并从 MySql DB 中提取数据