You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jinja2中使用条件if语句?Django模板匹配用户输入求助

嘿,让我一步步帮你解决这两个问题:

1. Jinja2中条件if语句的使用方法

Jinja2的if语句语法和Python很像,但更适配模板渲染场景,下面是几种常见的用法:

  • 基础判断:直接检查变量是否为真(比如非空、非零、布尔值为True)
{% if user.is_authenticated %}
  <p>欢迎回来,{{ user.username }}!</p>
{% endif %}
  • if-else分支:当条件不满足时执行备选逻辑
{% if product.stock > 0 %}
  <p>库存充足,可立即下单</p>
{% else %}
  <p>抱歉,商品暂时缺货</p>
{% endif %}
  • 多分支elif:处理多种递进的条件
{% if score >= 90 %}
  <p>成绩等级:优秀</p>
{% elif score >= 80 %}
  <p>成绩等级:良好</p>
{% elif score >= 60 %}
  <p>成绩等级:及格</p>
{% else %}
  <p>成绩等级:不及格</p>
{% endif %}
  • 结合比较与逻辑运算符:支持==、!=、>、<等比较,以及and、or、not逻辑组合
{% if user.age >= 18 and user.country == "CN" %}
  <p>你符合访问成人内容的条件</p>
{% endif %}
2. Django中结合用户输入的条目过滤

作为Django新手,你已经完成了展示列表的基础工作,接下来只要三步就能实现“仅显示匹配用户输入的内容”:

步骤1:添加前端搜索表单

先在模板里加一个简单的表单,让用户输入关键词。这里用GET请求(方便用户分享搜索链接),如果是敏感内容可以换成POST:

<!-- 放在页面顶部或合适位置 -->
<form method="GET" action="">
  <input type="text" name="search_query" placeholder="输入条目名称搜索..." value="{{ search_query }}">
  <button type="submit">搜索</button>
</form>

name="search_query"是后端获取输入的标识,value="{{ search_query }}"用来在提交后保留用户输入的内容,提升体验。

步骤2:后端处理输入并传递数据

在你的views.py视图函数中,获取用户提交的搜索词,再把它和数据库条目一起传到模板:

from django.shortcuts import render
from .models import YourModel  # 替换成你的实际模型类

def your_list_view(request):
    # 获取搜索词,默认是空字符串(用户没输入时显示全部)
    search_query = request.GET.get('search_query', '')
    
    # 方案一:后端提前过滤(推荐,性能更好,减少模板压力)
    # all_items = YourModel.objects.filter(item_name__icontains=search_query)
    # 注:__icontains是不区分大小写的包含匹配,用__exact可以做精确匹配
    
    # 方案二:保持全量查询,在模板里过滤(适合数据量小的简单场景)
    all_items = YourModel.objects.all()
    
    context = {
        'all_items': all_items,
        'search_query': search_query
    }
    return render(request, 'your_template.html', context)

步骤3:模板中结合for和if实现过滤

修改你原有的模板代码,加入if判断。如果用方案二(模板过滤),代码如下:

{% for inc in all_items %}
  {% if search_query == '' or inc.item_name == search_query %}
    <!-- 搜索词为空时显示全部,否则只显示名称匹配的条目 -->
    <ul>
      <li><p>{{ inc.item_name }}</p></li>
    </ul>
    <hr>
  {% endif %}
{% endfor %}

如果想要模糊匹配(比如包含关键词就显示),可以把条件改成:

{% if search_query == '' or inc.item_name contains search_query %}

或者不区分大小写的模糊匹配:

{% if search_query == '' or inc.item_name lower == search_query lower %}

小提示:

如果用方案一的后端过滤,模板里直接遍历all_items就行,不用加if判断,这种方式在数据量大的时候更高效。如果用POST请求,记得在表单里加上{% csrf_token %},后端用request.POST.get('search_query', '')获取输入。

内容的提问来源于stack exchange,提问作者Arjun Kashyap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:25:57