Django for标签详解

Django的for标签是一种方便的循环机制,它允许我们在模板中迭代指定的可迭代对象,例如Python中的列表、元组和字典。在循环过程中,我们可以使用for标签定义计数器,以便在模板中进行操作。

下面我们将详细介绍Django for标签的用法,并提供示例代码。

for标签的语法格式如下:

{% for item in iterable %}
    ...  # 循环体
{% empty %}
    ...  # 列表为空时的处理方法
{% endfor %}

在这个语法格式中,item是循环中每一项的变量名,iterable是要迭代的可迭代对象。for标签的empty块是可选的,当循环的列表为空时,会执行empty块中的代码。

迭代列表

假设我们有一个列表fruits,它存储了一些水果的名称,我们可以使用for标签迭代这个列表,并在模板中显示每个水果的名称。

# views.py
def show_fruits(request):
    fruits = ['apple', 'banana', 'orange', 'grape']
    return render(request, 'fruits.html', {'fruits': fruits})

<!-- fruits.html -->
<ul>
{% for fruit in fruits %}
    <li>{{ fruit }}</li>
{% empty %}
    <li>No fruits available.</li>
{% endfor %}
</ul>

在这个示例中,我们首先定义了一个名为fruits的列表,它包含一些水果的名称。然后,在模板中,我们使用for标签迭代这个列表,将水果名称显示在li标签中。如果列表为空,for标签会执行empty块中的代码,显示"No fruits available"。

迭代字典

除了迭代列表外,for标签还可以迭代字典。在循环中,字典的每个键值对由两个变量表示,分别是字典中的键和相应的值。

# views.py
def show_dict(request):
    my_dict = {'name': 'John', 'age': 30, 'email': 'john@example.com'}
    return render(request, 'dict.html', {'my_dict': my_dict})

<!-- dict.html -->
<ul>
{% for key, value in my_dict.items %}
    <li>{{ key }}: {{ value }}</li>
{% empty %}
    <li>No data available.</li>
{% endfor %}
</ul>

在这个示例中,我们使用items()方法获取字典中的所有键值对,并使用for标签迭代它们。循环体中使用了两个变量keyvalue,分别表示字典中的键和相应的值。

过滤和排序

除了基本的for循环外,Django还提供了一些使用for标签进行过滤和排序的高级用法。例如,我们可以使用forif结合进行条件筛选。

# views.py
def show_even_numbers(request):
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    return render(request, 'numbers.html', {'numbers': numbers})

<!-- numbers.html -->
<ul>
{% for num in numbers %}
  {% if num % 2 == 0 %}
    <li>{{ num }}</li>
  {% endif %}
{% empty %}
  <li>No even numbers found.</li>
{% endfor %}
</ul>

在这个示例中,我们定义了一个名为numbers的列表,它包含1到10的数字。然后,在模板中,我们使用for标签迭代这个列表,并在循环中使用if条件判断筛选出偶数。如果没有找到任何偶数,for标签会执行empty块中的代码。

for标签还可以使用order_by过滤器进行排序,例如我们可以使用order_by对模型中的数据进行排序。

# views.py
def show_articles(request):
    articles = Article.objects.all().order_by('-pub_date')
    return render(request, 'articles.html', {'articles': articles})

<!-- articles.html -->
<ul>
{% for article in articles %}
    <li>{{ article.title }} - {{ article.author }} - {{ article.pub_date }}</li>
{% empty %}
    <li>No articles available.</li>
{% endfor %}
</ul>

在这个示例中,我们从Article模型中获取所有数据并按发布日期倒序排序。在模板中,我们使用for标签迭代这个排好序的数据,并显示每篇文章的标题、作者和发布日期。

在Django中,for标签是一个非常有用的工具,它使我们能够迭代各种可迭代对象,并以易于编写和阅读的方式处理数据。通过了解for标签的使用,我们可以轻松地创建可靠的、易于维护的模板,并在Web应用程序中使用它们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django for标签详解 - Python技术站

(0)
上一篇 2023年3月12日
下一篇 2023年3月12日

相关文章

  • django 从零开始 11 根据时间戳加密数据

      django自带一个加密的方法signer,对数据进行一个加密 一般这种方式用于账号密码邮箱找回,或者token设置       class TimestampSigner(Signer): def timestamp(self): return baseconv.base62.encode(int(time.time())) def sign(self…

    Django 2023年4月11日
    00
  • [django]从前端返回字符串,后端转换为字典,执行数据添加操作

    具体如题: js代码如下: $(‘#bill_add’).click(function(){//合同添加 var bill1 = $(“#bill1”).val();var bill2 = $(“#bill2”).val();var bill3 = $(“#bill3”).val();var bill4 = $(“#bill4”).val();var bil…

    Django 2023年4月13日
    00
  • Django笔记二十一之使用原生SQL查询数据库

    本文首发于公众号:Hunter后端原文链接:Django笔记二十一之使用原生SQL查询数据库 Django 提供了两种方式来执行原生 SQL 代码。 一种是使用 raw() 函数,一种是 使用 connection.cursor()。 但是官方还是推荐在使用原生 SQL 之前,尽量的先去探索一下 QuerySet 提供的各种 API。 目前而言,官方文档提供…

    2023年4月13日
    00
  • Django之静态文件配置

    对于前端已经写好了的文件 我们只是拿过来使用 那么这些文件都可以称之为叫”静态文件”html文件默认全都放在templates文件夹下 静态文件可以是 bootstrap一类的前段框架 已经写好了的 图片 css js   静态文件默认全都放在static文件夹下 static文件夹中默认会默认创建的子文件夹 css文件夹 当前网站所有的样式文件 js文件 …

    Django 2023年4月11日
    00
  • Django设置/获取/删除session

    # 设置sessiondef setSession(request): request.session[‘username’] = ‘ruan’ request.session[‘isLogin’] = True return HttpResponse(‘OK’)# 获取session def GetSession(request): isLogin = r…

    Django 2023年4月13日
    00
  • Python+Django搭建自己的blog网站

    首先我们将以下面两个示例为例,详细讲解“Python+Django搭建自己的blog网站”的完整攻略。 示例1 1. 创建项目和应用 首先需要安装Django,可以通过命令行输入pip install Django来进行安装。安装完成后,我们创建一个Django项目,可以通过输入如下命令创建: django-admin startproject myblog…

    Django 2023年5月16日
    00
  • django导入环境变量 Please specify Django project root directory

    在创建了套层的文件后,django需要的解释器也需要重新设置,普通的设置明显不能用,那么该如何解决呢 下图:    点击OK       依次点击 apply 和 ok  

    Django 2023年4月13日
    00
  • 【服务后端】Django的多表数据查询

    有数据表class和ClassUserTemp表     需求是要筛选出某个用户lUser管理的班级下ClassUserTemp的所有数据。 Class表的Owner字段表示关联的管理员用户。 只需要使用__关联属性即可,条件路径就是 班级  –> 班级的管理员  –> 与用户比较 pUserClasses = ClassUserTemp.o…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部