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

如何在Django模板的{% if %}标签中使用{{ variable }}动态变量?

解决Django模板中无法嵌套{{ }}在{% %}标签内的问题

你遇到的问题是Django模板语法的限制导致的——模板标签({% %})内部不能直接嵌套变量插值({{ }}),所以store{{ forloop.counter }}这种写法会被解析器当成无效语法。下面给你两种可行的解决方案,优先推荐第一种,更符合Django的最佳实践:

方案一:在视图层整理变量(最优解)

与其在模板里费劲拼接变量名,不如在views.py里把分散的store1、store2、store3整理成一个列表,这样模板循环起来会非常简洁:

修改views.py

def your_view(request):
    # 假设这里是你的原有变量赋值逻辑
    store1 = "你的店铺1数据"
    store2 = "你的店铺2数据"
    store3 = "你的店铺3数据"
    
    # 把变量打包成列表传入模板
    context = {
        "stores": [store1, store2, store3]
    }
    return render(request, "your_template.html", context)

模板中使用

{% for store in stores %}
    {% if store %}
        <!-- 这里写你需要展示的内容 -->
        <p>店铺数据:{{ store }}</p>
    {% endif %}
{% endfor %}

这种方式把数据整理的逻辑放在了视图层(应该放的地方),模板只负责渲染,代码可读性和维护性都更好。

方案二:自定义模板标签(不修改视图的情况下)

如果因为某些原因你没法修改视图代码,可以通过自定义模板标签来实现动态获取变量的需求:

步骤1:创建自定义模板标签文件

在你的Django应用下新建templatetags目录(如果没有的话),然后创建custom_tags.py文件:

from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def get_variable(context, var_name):
    # 从模板上下文中获取指定名称的变量
    return context.get(var_name, None)

步骤2:在模板中使用自定义标签

首先加载标签,然后循环获取对应变量:

{% load custom_tags %}

{% for i in "123" %}
    {% get_variable 'store'|add:i as current_store %}
    {% if current_store %}
        <!-- 这里写你需要展示的内容 -->
        <p>店铺{{ i }}数据:{{ current_store }}</p>
    {% endif %}
{% endfor %}

这里通过'store'|add:i拼接出变量名(比如store1),再用自定义的get_variable标签从模板上下文中取出对应的变量值,就能实现你想要的逻辑了。


内容的提问来源于stack exchange,提问作者Jay P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:01:54