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

如何在Django模板中动态调用表单名称?

Django模板中动态循环访问表单字段的解决方案

Django模板不支持直接通过字符串拼接的方式动态访问对象属性,所以你当前的写法无法将循环变量n与f拼接成f1、f2来调用对应表单字段。下面提供两种可行的解决方法:

方法1:视图层直接传递表单字段列表(推荐)

这种方法最简洁可靠,直接在视图中把需要循环的表单字段整理成列表传入模板:

视图代码(view.py)

def your_view(request):
    # 假设你已初始化包含f1、f2字段的表单实例
    form = YourFormClass()
    # 将需要循环的表单字段存入formList
    context = {
        "formList": [form.f1, form.f2]
    }
    return render(request, "your_template.html", context)

模板代码

直接循环列表中的表单字段即可:

{% for form_field in formList %}
    {{ form_field }}
{% endfor %}

方法2:自定义模板过滤器实现动态属性访问

如果必须通过数字索引来动态获取字段,可以通过自定义模板过滤器实现对象属性的动态获取:

1. 创建自定义过滤器

在你的Django应用目录下创建templatetags文件夹,里面新建__init__.py和custom_filters.py文件,在custom_filters.py中写入:

from django import template

register = template.Library()

@register.filter
def get_object_attr(obj, attr_name):
    # 获取对象的指定属性,不存在则返回None
    return getattr(obj, attr_name, None)

2. 修改视图传参

将数字范围转为字符串列表,避免模板中字符串与数字拼接报错:

def your_view(request):
    form = YourFormClass()
    context = {
        "formList": ["1", "2"]  # 用字符串而非数字
    }
    return render(request, "your_template.html", context)

3. 模板中使用过滤器

先加载自定义过滤器,再动态拼接属性名并获取字段:

{% load custom_filters %}

{% for num_str in formList %}
    {{ form|get_object_attr:'f'|add:num_str }}
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:10:54