有客自远方来52 2024-07-30 19:12 采纳率: 15.3%
浏览 7
已结题

为什么if语句没有起作用?

以下是我的部分代码,莫用了if语句想要实现当用户登录成功后导航栏会展示不同的页面,并根据session获取到当前登录用户的姓名,但现在为什么登录成功后显示出的依然是需要登陆的页面?
auth

class AuthMiddleware(MiddlewareMixin):

    def process_request(self, request):
        """如果用户已登录,则request中赋值"""
        user_id = request.session.get('user_id', 0)
        user_object = models.Username.objects.filter(id=user_id).first()
        request.tracer = user_object

前端语句

{% if request.tracer %}
    <li class="dropdown">
        <a href=" " class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
           aria-expanded="false">{{ request.tracer.username }}<span class="caret"></span></a >
        <ul class="dropdown-menu">
            <li><a href="/project/list">管理中心</a ></li>
            <li role="separator" class="divider"></li>
            <li><a href="/logout">退出</a ></li>
        </ul>
    </li>
{% else %}
    <li><a href="/login">登录</a ></li>
    <li><a href="/register">注册</a ></li>
{% endif %}


数据库语句

class Username(models.Model):
    """管理员"""
    username = models.CharField(verbose_name="用户名", max_length=32, db_index=True)  # 创建索引
    email = models.EmailField(verbose_name="邮箱", max_length=32)
    password = models.CharField(verbose_name="密码", max_length=32)
    mobile = models.CharField(verbose_name="手机号", max_length=11)

  • 写回答

1条回答 默认 最新

  • 鸽芷咕 C/C++领域优质创作者 2024-07-30 21:56
    关注
    1. 使用Django的上下文处理器(Context Processors)
      上下文处理器允许你在每个模板的上下文中添加全局变量。你可以通过自定义一个上下文处理器来将用户信息添加到模板的上下文中。

    步骤:

    在你的Django项目的settings.py文件中,找到TEMPLATES设置,并添加你的上下文处理器到OPTIONS['context_processors']列表中。

    python
    TEMPLATES = [  
        {  
            ...  
            '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',  
                    'your_app.context_processors.custom_context',  # 添加你的上下文处理器  
                ],  
            },  
        },  
    ]
    
    

    创建一个context_processors.py文件在你的app的目录下(如果还没有的话),并添加一个函数来返回用户信息。

    python
    # your_app/context_processors.py  
    from django.contrib.auth.models import User  
     
    def custom_context(request):  
        user_id = request.session.get('user_id', None)  
        if user_id:  
            user_object = User.objects.filter(id=user_id).first()  
            return {'current_user': user_object}  
        return {'current_user': None}
    
    

    注意:这里我假设你使用的是Django的User模型,如果你有自己的Username模型,你应该相应地修改它。

    在你的模板中,你现在可以使用current_user而不是request.tracer。

    html
    {% if current_user %}  
        <li class="dropdown">  
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ current_user.username }}<span class="caret"></span></a>  
            ...  
        </li>  
    {% else %}  
        <li><a href="/login">登录</a></li>  
        <li><a href="/register">注册</a></li>  
    {% endif %}
    
    
    
    1. 使用模板标签或过滤器
      如果你更喜欢保持模板的简洁,并希望将逻辑保持在Python代码中,你可以编写自定义的模板标签或过滤器来执行这个逻辑。
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月2日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?