进入另一个视图时,django用户名“消失”

时间:2018-03-12 17:56:40

标签: django username

在开始之前,我想指出我已经浏览了一半的互联网以寻找可能的解决方案,但没有真正解决我的问题。也就是说,我是Django和Python的初学者,所以这可能是一个简单的问题,也许我太愚蠢了,无法弄明白。

所以,这就是事情。我正在为大学做一个项目,我必须建立一个主要强调后端的网站。我选择Django作为框架,到目前为止我已经能够让新用户注册并登录和注销。问题可能不是戏剧性的,但至少对我来说很烦人。更清楚一点,用户登录后,我想在注销按钮旁边的顶部栏中显示他的名字。

因此,登录面板就是这样:

LoginPanel

这部分没问题,我只是点击了登录,它就可以了。

然后我到了这里:

LoginUser

正如您所看到的,首先,用户名将显示在注销旁边的顶部栏中。但如果我点击“Whatever”或用户名本身,它就会消失。这可能与以下事实有关:最初,当用户名仍然可见时,我在url“login_user”中,在urls.py中使用视图“login_user”。一旦我点击上面提到的任何一个,我希望它切换到一个名为“user_panel.html”的模板,但我想这也可能是一个问题。以下是它的外观:

UserPanel

视图“login_user”如下所示:

def login_user(request):

if request.method == "POST":
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)

    if user is not None:
        if user.is_active:
            login(request, user)
            return render(request, 'main/user_panel.html')

        else:
            return render(request, 'main/login.html', {'error_message': 'Your account has been disabled'})
    else:
        return render(request, 'main/login.html', {'error_message': 'Invalid login'})
return render(request, 'main/login.html')

用户名在“user_panel.html”中显示为“{{user.get_username}}”。

就像我说的,这可能是一个非常基本的问题,但我根本无法理解它,真的打败了我。提前感谢您提供任何可能的帮助。

编辑:

在settings.py中:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},

因此,user.get_username在user_panel.html中使用,如下所示:

<li>
  <a href="{%url 'main:user_panel'%}">
    <div style="font-size:1.5em; color:lightblue">
     <i class="fas fa-user-circle"></i> <font size="5" face = "Ubuntu" color="white">{{ user.get_username }}</font></div>
  </a>
</li>

user_panel视图:

def user_panel(request):
template = loader.get_template('main/user_panel.html')

return HttpResponse(template.render())

现在它显示了用户名,但每次点击,都会下载:

Downloads

2 个答案:

答案 0 :(得分:0)

  

用户名显示在“user_panel.html”中,其中包含“{{   user.get_username}}“。

您似乎忘了将user传递给模板:

return render(request, 'main/user_panel.html', {'user':user})

答案 1 :(得分:0)

只需将user.get_username替换为:

request.user.username



request.user.get_username