Django的html在for遍历后显示“一、二、三...”和“1,2,3...”分级标题

例如当天的html为:

{% load static %}
{% csrf_token %}
<!DOCTYPE html>
<html>
<head>
    <title>生活规划师</title>
    <link rel="stylesheet" href="{% static 'css/LifePlanningGuide.css' %}">
    <script src="{% static 'js/LifePlanningGuide.js' %}"></script>
</head>
<body>
    <h1>生活规划师</h1>
    <button id="create-theme-button">新建主题</button>
        
    {% for theme in themes %}
        <div class="theme-container">
          <h2 class="theme-title">{{ theme.name }}</h2>
          <button id="create-task-button-{{ theme.id }}" class="create-task-button" data-theme-id="{{ theme.id }}">新建任务</button>
    
          {% for task in tasks %}
              {% if task.theme.id == theme.id %}
                  <div class="task-container">
                      <p class="task-description">{{ task.description }}</p>
                      <div class="task-buttons">
                          <button class="top-task-button" data-task-id="{{ task.id }}">置顶</button>
                          <button class="move-up-task-button" data-task-id="{{ task.id }}">上移</button>
                          <button class="move-down-task-button" data-task-id="{{ task.id }}">下移</button>
                          <button class="delete-task-button" data-task-id="{{ task.id }}">删除</button>
                      </div>
                  </div>
              {% endif %}
          {% endfor %}
        </div>
    {% endfor %}
</body>
</html>

在这里插入图片描述
我们希望在每个分级标题前面显示标题号,怎么实现呢?

首先看看我的view.py里面的视图函数:

def index(request):
    themes = Theme.objects.filter(user=request.user, is_deleted=False)
    tasks = Task.objects.filter(theme__user=request.user, theme__is_deleted=False).order_by('-is_top', 'created_at')
    return render(request, 'LifePlanningGuide.html', {'themes': themes, 'tasks': tasks})

鉴于现有视图函数,我们需要稍微调整之前提出的方案,以便在模板中实现每个主题的中文数字编号和每个任务的阿拉伯数字编号。由于是分开传递themestasks,而非作为主题属性的任务列表,我们可以在模板中使用一些小技巧来实现需求。

首先,定义一个简单的数字到中文的转换函数可能不太适用于当前的情况,因为Django的模板不支持在模板中直接执行Python代码。但是,我们可以通过自定义模板过滤器来实现。

步骤 1: 创建一个自定义模板过滤器

  1. 在Django应用目录中创建一个templatetags目录。
  2. templatetags目录中,创建一个__init__.py文件和一个custom_filters.py(或其他你喜欢的名字)文件。
  3. custom_filters.py中,定义一个转换数字到中文的过滤器和一个转换数字到阿拉伯数字的过滤器(虽然后者在Django模板中通过forloop.counter已有内置支持,这里仅为演示自定义过滤器的创建)。
from django import template

register = template.Library()

@register.filter(name='num_to_chinese')
def num_to_chinese(value):
    chinese_nums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
    if value < 11:
        return chinese_nums[value]
    elif value < 20:
        return '十' + chinese_nums[value - 10]
    else:
        return chinese_nums[value // 10] + '十' + (chinese_nums[value % 10] if value % 10 != 0 else '')

步骤 2: 在视图中按主题分组任务

调整视图,以在每个主题下分组任务,这样可以在模板中更容易地管理。

from django.shortcuts import render
from .models import Theme, Task

def index(request):
    themes = Theme.objects.filter(user=request.user, is_deleted=False)
    tasks = Task.objects.filter(theme__user=request.user, theme__is_deleted=False).order_by('-is_top', 'created_at')
    tasks_grouped_by_theme = {
        theme.id: list(Task.objects.filter(theme=theme, theme__is_deleted=False).order_by('-is_top', 'created_at'))
        for theme in themes
    }
    return render(request, 'LifePlanningGuide.html', {'themes': themes, 'tasks_grouped_by_theme': tasks_grouped_by_theme, 'tasks': tasks})

步骤 3: 在HTML模板使用自定义过滤器和调整数据展示

首先,确保在模板顶部加载自定义的模板标签:

{% load static %}
{% csrf_token %}
{% load custom_filters %}

然后,根据主题和任务展示的需求调整HTML模板:

{% load static %}
{% csrf_token %}
{% load custom_filters %}

<!DOCTYPE html>
<html>
<head>
    <title>生活规划师</title>
    <link rel="stylesheet" href="{% static 'css/LifePlanningGuide.css' %}">
    <script src="{% static 'js/LifePlanningGuide.js' %}"></script>
</head>
<body>
    <h1>生活规划师</h1>
    <button id="create-theme-button">新建主题</button>
        
    {% for theme in themes %}
        <div class="theme-container">
          <h2 class="theme-title">{{ forloop.counter|num_to_chinese }}、{{ theme.name }}</h2>
          <button id="create-task-button-{{ theme.id }}" class="create-task-button" data-theme-id="{{ theme.id }}">新建任务</button>
    
          {% for task in tasks %}
              {% if task.theme.id == theme.id %}
                  <div class="task-container">
                      <p class="task-description">{{ forloop.counter }}. {{ task.description }}</p>
                      <div class="task-buttons">
                          <button class="top-task-button" data-task-id="{{ task.id }}">置顶</button>
                          <button class="move-up-task-button" data-task-id="{{ task.id }}">上移</button>
                          <button class="move-down-task-button" data-task-id="{{ task.id }}">下移</button>
                          <button class="delete-task-button" data-task-id="{{ task.id }}">删除</button>
                      </div>
                  </div>
              {% endif %}
          {% endfor %}
        </div>
    {% endfor %}
</body>
</html>

通过上述步骤,实现主题标题前以中文数字编号,每个主题的子任务前以阿拉伯数字编号的需求。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/520580.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRtos入门-7 中断管理

中断管理 中断管理相比非中断的优势 1&#xff0c;简洁和效率。 2&#xff0c;同步和安全。提供了中断安全的操作&#xff0c;确保在中断上下文中执行时不会引发竞态条件或破坏系统状态。 3&#xff0c;通过配置中断的优先级&#xff0c;可以确保高优先级的中断能够立即响应…

AI跟踪报道第36期-新加坡内哥谈技术-这周的AI新闻铺天盖地

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

STM32重要参考资料

stm32f103c8t6 一、引脚定义图 二、时钟树 三、系统结构图 四、启动配置 &#xff08;有时候不小心短接VCC和GND&#xff0c;芯片会锁住&#xff0c;可以BOOT0拉高试试&#xff08;用跳线帽接&#xff09;&#xff09; 五、最小系统原理图 可用于PCB设计 六、常见折腾人bug…

谷歌推出多模态视频模型,自动生成丰富动作视频

谷歌的研究人员推出了一款多模态扩散模型——VLOGGER。 用户只需要向VLOGGER输入图像、语音&#xff0c;就能生成带语音、丰富动作的人物视频。VLOGGER基于扩散模型开发而成&#xff0c;并提出了一种全新的架构&#xff0c;将文本生成图像模型与空间、时间控制相结合&#xff…

二叉树算法练习day.2

102.二叉树的层序遍历 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&a…

EFK(elasticsearch+filebeat+kibana)日志分析平台搭建

本文是记录一下EFK日志平台的搭建过程 项目背景&#xff1a; 此次搭建的日志分析平台主要是采集服务器上的java服务的log日志(输出的日志已经是json格式)&#xff0c;这些日志都已经按照不同环境输出到/home/dev /home/test1 /home/test2 目录下了&#xff0c;按照不同的应…

百度松果菁英班——机器学习实践一:海量文件遍历

飞桨AI Studio星河社区-人工智能学习与实训社区 &#x1f990;在指定目录下显示目录结构 !tree -L 显示级数限制 指定目录 如&#xff1a; !tree -L 3 ./data/ 表示&#xff1a;在目录 ./data/ 下显示目录结构&#xff0c;限制显示到第三级子目录或文件。这个命令通常在命…

基于单片机冬季供暖室温调节控制系统

**单片机设计介绍&#xff0c;基于单片机冬季供暖室温调节控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的冬季供暖室温调节控制系统是一种集温度检测、控制和显示功能于一体的智能化系统。该系统以单片机为…

基于Springboot+Vue实现前后端分离社团管理系统

一、&#x1f680;选题背景介绍 &#x1f4da;推荐理由&#xff1a; 21世纪时信息化的时代&#xff0c;几乎任何一个行业都离不开计算机&#xff0c;将计算机运用于社团管理也是十分常见的。过去使用手工的管理方式对大学生社团进行管理&#xff0c;造成了管理繁琐、难以维护等…

图解大型网站多级缓存的分层架构

前言 缓存技术存在于应用场景的方方面面。从浏览器请求&#xff0c;到反向代理服务器&#xff0c;从进程内缓存到分布式缓存&#xff0c;其中缓存策略算法也是层出不穷。 假设一个网站&#xff0c;需要提高性能&#xff0c;缓存可以放在浏览器&#xff0c;可以放在反向代理服…

开源流程图表库(04):mxGraph,都是可视化编辑,导出使用。

mxGraph是一个用于创建和展示图形的JavaScript库。它提供了丰富的功能和工具&#xff0c;可以用于构建各种类型的图形应用程序&#xff0c;包括流程图、组织结构图、网络拓扑图等。 mxGraph的编辑器 一、mxGraph的特点和功能 以下是一些mxGraph的特点和功能&#xff1a; 强大…

ES10 学习

文章目录 1. Object.fromEntries()2. trimStart() 和 trimEnd()3. 数组的flat() 和flatMap()4. Symbol 对象的description 属性5. try ... catch(e){} 1. Object.fromEntries() Object.fromEntries() 方法允许你轻松地将键 值对列表转换为对象 let arr [["name",&qu…

Lanelets_ 高效的自动驾驶地图表达方式

Lanelets: 高效的自动驾驶地图表达方式 附赠自动驾驶学习资料和量产经验&#xff1a;链接 LaneLets是自动驾驶领域高精度地图的一种高效表达方式&#xff0c;它以彼此相互连接的LaneLets来描述自动驾驶可行驶区域&#xff0c;不仅可以表达车道几何&#xff0c;也可以完整表述车…

有效的括号--如果字符串没有左括号,或者字符串是右括号为开头,则存在括号不匹配和顺序不正确的情况公字符串无效

题目-有效的括号 ​ 一、分析题目 二、编写代码 typedef char STDataType;typedef struct Stack {STDataType* a; //int top; //相当于数组下标&#xff0c;注意栈为空时&#xff0c;top的值应该为&#xff1f;int capacity;//栈的容量 }ST;void STInit(ST* pst); void STD…

基于SSM框架就业管理系统

摘要 本论文主要讲述了基于SSM框架及MySQL数据库实现的就业管理系统的设计和开发过程。本论文中所讲的就业管理系统是通过所学的知识创办一个非商业性的网站平台&#xff0c;使所有想要就业信息查看的高校毕业生们与想要宣传自己公司的商家们都可以更方便快捷的进行就业和体验…

MobaXterm不显示隐藏文件

MobaXterm在左边显示隐藏文件&#xff0c;以.开头的文件&#xff0c;想让它不显示 点击方框圈中的不显示隐藏文件 隐藏文件不显示了

InterlliJ Debug方式启动 method breakpoints may dramatically show down debugging

使用idea在DEBUG的时候出现Method breakpoints may dramatically slow down debugging&#xff0c; 如图&#xff1a; 根据语义可能是断点打在方法上面了&#xff0c;导致在某个断点卡住了。 重启服务器和重启idea已然无解。 打开Breakpoints面板看看&#xff0c;(快捷键&…

【javaWeb Maven高级】Maven高级学习

Maven高级学习 分模块设计继承与聚合继承版本锁定聚合 私服资源的上传与下载本地私服配置 分模块设计 为什么需要进行分模块设计&#xff1f; 将项目按照功能拆分成若干个子模块&#xff0c;方便项目的管理维护&#xff0c;扩展&#xff0c;也方便模块间的相互调用&#xff0c…

电商技术揭秘六:前端技术与用户体验优化

文章目录 引言一、前端技术在电商中的重要性1.1 前端技术概述1.2 用户体验与前端技术的关系 二、响应式设计与移动优化2.1 响应式设计的原则2.2 移动设备优化策略2.3 响应式设计的工具和框架 三、交互设计与用户体验提升3.1 交互设计的重要性3.2 用户体验的量化与优化3.3 通过前…

【更新】中国区域创新能力指数数据集(无缺失值)(2001-2022年)

01、数据简介 中国区域创新能力指数是一个综合反映各地区在知识创造、知识获取、企业创新、创新环境和创新绩效等方面能力的指标。该指数基于一系列复杂的评价体系&#xff0c;包括多个层级的指标&#xff0c;以全面、准确地衡量中国各区域的创新能力。 《中国区域创新能力报…