【问题标题】:Django Template: remove the buttons when session startsDjango模板:会话开始时删除按钮
【发布时间】: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 %}

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

【问题讨论】:

    标签: html django python-2.7 django-templates django-views


    【解决方案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}),但对登录后我的模板。
    猜你喜欢
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2015-01-22
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多