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

如何从Django模板字符串中提取{{}}包裹的上下文变量列表

解决方案

你可以通过两种方式实现需求,分别是正则快速实现和Django内置模板解析实现:

方案1:正则表达式实现

适合简单场景,代码轻量无需依赖Django内部逻辑:

import re

def my_func(my_str):
    # 匹配{{ }}包裹的变量,自动忽略变量前后的空格
    pattern = r'\{\{\s*(\w+)\s*\}\}'
    # 去重同时保留变量首次出现的顺序
    return list(dict.fromkeys(re.findall(pattern, my_str)))

my_str = "Hello, {{ name }}. I will arrive at {{ time }}"
print(my_func(my_str))  # 输出 ["name", "time"]

如果不需要保留出现顺序,也可以直接用list(set(re.findall(pattern, my_str)))实现去重。

方案2:Django内置模板解析实现

适合复杂Django模板场景,完全遵循Django模板语法规则,不会出现正则匹配的边界错误(比如转义字符、模板注释、带过滤器的变量等情况都能正确识别):

from django.template import Template
from django.template.base import VariableNode

def my_func(my_str):
    variables = set()
    # 用Django原生模板解析器解析字符串
    template = Template(my_str)
    # 遍历所有节点提取变量
    for node in template.nodelist:
        if isinstance(node, VariableNode):
            variables.add(node.filter_expression.var.var)
    return list(variables)

my_str = "Hello, {{ name }}. I will arrive at {{ time }}"
print(my_func(my_str))  # 输出 ["name", "time"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:27:02