Django模板:会话开始时删除按钮

Posted

技术标签:

【中文标题】Django模板:会话开始时删除按钮【英文标题】:Django Template: remove the buttons when session starts 【发布时间】:2013-08-21 19:28:24 【问题描述】:

我正在尝试在 Django 中进行登录身份验证。我在上方导航栏中制作了登录和注册按钮。

现在我需要实现的是,当我登录到应用程序时,会发生重定向,那时会检查会话,如果会话已经开始,那么登录和注册按钮就会消失,用户 ABC 按钮就会出现在它的位置。

我正在尝试用我的代码来做这件事。

% if request.session.loggedin %
    <li><a data-toggle="modal" href="#"><b>Hello Chitrank</b></a></li>
% else %
     <li><a data-toggle="modal" href="#signup"><b>Sign Up</b></a></li> 
    <li><a data-toggle="modal" href="#signin"><b>Sign In</b></a></li>
% endif %

请建议我该怎么做,我是否使用了错误的方式来检查会话,或者如果有其他方式可以做到这一点,那么欢迎使用解决方案。

【问题讨论】:

【参考方案1】:
% if user.is_authenticated %

是您正在寻找的。 https://docs.djangoproject.com/en/dev/ref/templates/api/#django-contrib-auth-context-processors-auth

也允许你这样做

<span>Welcome back  user.username !</span>

【讨论】:

它仍然无法正常工作是因为我在 index.html 页面中使用了% include './django_component_include/header.html' % 谢谢 knightZeRo,sn-p 为我工作,休息一下,我自定义登录视图。【参考方案2】:

对此还有另一种解决方案,基于登录用户(要求您在身份验证系统中使用 django 构建)。 您可以在模板中访问request.user.is_authenticated 并区分其状态(True 是登录)。

【讨论】:

我在我的模板中使用% if request.user.is_authenticated % 来检查会话下的登录用户,但是当我登录到这个时,我仍然得到登录和注册按钮。【参考方案3】:

您可以在相应的视图中检查您是否已登录并将变量current_user传递给您的模板,然后检查:

    % if current_user %
        Hello, current_user.name
    % else %
        # ... Display signin and signup buttons #
    % endif %

【讨论】:

正如你所说,我已经更新了我的views.py文件,因为我的views.py是existing_user = User.objects.authenticate(**form.cleaned_data),我还引用了一个变量siteuser=existing_user并将响应返回为return render(request,'index.html','siteuser':siteuser),但对登录后我的模板。

以上是关于Django模板:会话开始时删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

Django视图绕过渲染请求

Django:使用模板中的按钮删除查询过滤器

Django:使用模板中的按钮删除查询过滤器

Django:从模板中访问会话变量?

如何在模板django中请求会话值

在 django 模板中获取项目的值以进行循环