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

在Flask应用的index.html中调用Python函数是否可行?

可行方案及优化建议

你的需求完全可以实现,下面是几种常用的解决方案,按推荐程度排序:

1. 提前在后端处理数据(最推荐)

在渲染模板前,直接给每个JSON条目添加判断标记,模板只负责根据标记展示内容,符合前后端逻辑分离原则,模板更简洁易维护。

后端代码示例:

from flask import Flask, render_template
import re

app = Flask(__name__)

def set_check(s):
    checks = ['Irons', 'Set', 'set', 'irons']
    return any(x in s for x in checks) or re.search(r'\d-[A-Z]', s) or re.search(r'\d\s-\s[A-Z]', s)

@app.route('/')
def your_route():
    # 替换为你的实际JSON列表数据
    results = [{'name': '2-B Set'}, {'name': 'Single Club'}, {'name': '5 - C Irons'}]
    
    # 遍历数据,给每个条目添加判断结果
    for item in results:
        item['is_set'] = set_check(item['name'])
    
    return render_template('your_template.html', results=results)

模板代码示例:

{% for item in results %}
    <!-- 这里放置你原本的条目内容渲染代码 -->
    {% if item.is_set %}
        <div class="set">SET</div>
    {% endif %}
{% endfor %}

2. 注册为模板过滤器

如果这个判断逻辑需要在多个模板中复用,可以把set_check注册成Flask的模板过滤器,模板里通过管道符直接调用。

后端代码示例:

from flask import Flask, render_template
import re

app = Flask(__name__)

# 用装饰器直接注册为模板过滤器
@app.add_template_filter
def set_check(s):
    checks = ['Irons', 'Set', 'set', 'irons']
    return any(x in s for x in checks) or re.search(r'\d-[A-Z]', s) or re.search(r'\d\s-\s[A-Z]', s)

@app.route('/')
def your_route():
    results = [{'name': '2-B Set'}, {'name': 'Single Club'}, {'name': '5 - C Irons'}]
    return render_template('your_template.html', results=results)

模板代码示例:

{% for item in results %}
    <!-- 原本的条目内容 -->
    {% if item.name|set_check %}
        <div class="set">SET</div>
    {% endif %}
{% endfor %}

3. 直接传递函数到模板(不推荐)

你之前尝试的传递函数方法是可行的,只是可能调用语法或传递方式有误。但这种方式会让模板混入后端逻辑,不利于长期维护,仅适合临时简单场景。

后端代码示例:

@app.route('/')
def your_route():
    results = [{'name': '2-B Set'}, {'name': 'Single Club'}, {'name': '5 - C Irons'}]
    # 直接把函数传递给模板
    return render_template('your_template.html', results=results, set_check=set_check)

模板代码示例:

{% for item in results %}
    <!-- 原本的条目内容 -->
    {% if set_check(item.name) %}
        <div class="set">SET</div>
    {% endif %}
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:57:23