有客自远方来52 2024-08-02 21:24 采纳率: 15.3%
浏览 1
已结题

为什么class添加失败?

以下是我的代码,我想实现菜单默认选中,依次我通过用户当前登录的url是否和需要默认选中的页面菜单的url一致,若一致,则添加class="active",但为什么我从页面的检查代码中却发现并没有添加成功,我该如何解决
PYTHON代码

def manage_menu_list(request):
    data_list = [
        {'title': '概览', 'url': reverse("dashboard", kwargs={'project_id': request.tracer.project.id})},
        {'title': '问题', 'url': reverse("issues", kwargs={'project_id': request.tracer.project.id})},
        {'title': '统计', 'url': reverse("statistics", kwargs={'project_id': request.tracer.project.id})},
        {'title': 'wiki', 'url': reverse("wiki", kwargs={'project_id': request.tracer.project.id})},
        {'title': '文件', 'url': reverse("file", kwargs={'project_id': request.tracer.project.id})},
        {'title': '设置', 'url': reverse("setting", kwargs={'project_id': request.tracer.project.id})},
    ]

    for item in data_list:
        # 当前用户访问的URL:request.path_info:  /manage/4/issues/xxx/add/
        if request.path_info.startswith(item['url']):
            item['class'] = 'active'
            return item
    return {'data_list': data_list}

标签代码

{% for item in data_list %}
    <li  class="{{ item.class }}" ><a href=" ">{{ item.title }}</a ></li>
{% endfor %}



页面代码

img

  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-08-02 21:31
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的代码和页面代码中,我注意到以下几点可能导致 class 添加失败的问题:

    1. URL 匹配方式

    你在 manage_menu_list 函数中通过 request.path_info 与菜单项的 url 进行字符串比较来判断是否添加 active 类。然而,这种比较可能并不准确,因为 request.path_info 返回的是完整的路径,而菜单项的 url 只是路径的一部分(通过 reverse 函数生成)。

    解决方案

    你可以尝试使用 Django 的 resolve 函数来解析请求的 URL,并与菜单项的 URL 进行更准确的匹配。这样你可以获取到与请求 URL 对应的视图函数和参数,然后进行比较。

    示例代码

    修改 manage_menu_list 函数中的 URL 匹配部分:

    from django.urls import resolve
    
    def manage_menu_list(request):
        data_list = [...]  # 你的数据列表保持不变
    
        for item in data_list:
            # 使用 resolve 函数解析请求的 URL
            try:
                resolved_url = resolve(item['url'])
                # 如果解析的 URL 与请求路径匹配,则添加 active 类
                if resolved_url.path == request.path:
                    item['class'] = 'active'
                    return item
            except Resolver404:  # 处理 URL 匹配不到的情况
                pass
        return {'data_list': data_list}
    

    2. HTML 模板渲染问题

    在你的 HTML 模板中,确保正确使用了 Django 的模板语言来渲染类名。从你提供的标签代码中看,似乎没有正确使用双引号或单引号来包裹 item.class。这可能导致类名无法正确渲染。

    解决方案

    修改标签代码中的类名渲染部分:

    {% for item in data_list %}
        <li class="{{ item.class }}"><a href="{{ item.url }}">{{ item.title }}</a></li>
    {% endfor %}
    

    总结

    根据上述解决方案,尝试修改你的代码,并重新检查页面源代码以确认 active 类是否已正确添加。如果问题仍然存在,请确保其他部分的代码(如 URL 配置、视图函数等)没有影响到这里的功能。

    评论 编辑记录

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求