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

如何在Django模板中访问Python f-string组合变量内的子变量?

解决方案

方法一:后端拆分后传递变量(推荐)

不在模板里处理字符串拆分,直接在视图或数据处理环节把item字符串拆分成独立变量,再传递到模板:

# 假设你在视图中获取了拼接后的item字符串
item_str = item.item  # 对应模板里的{{ item.item }}
# 拆分字符串
parts = item_str.split('_')
# 提取对应部分(索引0是item_id,1是flavour,2是strength)
flavour = parts[1]
strength = parts[2]
# 将这两个变量加入模板上下文
context.update({
    'flavour': flavour,
    'strength': strength,
    # 其他上下文变量...
})

模板中直接使用变量:

<td class="py-3">
   <p class="my-0"><strong>{{ item.product.name }}</strong></p>
   <p class="my-0"><strong>Flavour:</strong>{% if item.product.has_flavours %}{{ flavour|upper }}{% else %}N/A{% endif %}</p>
   <p class="my-0"><strong>Strength:</strong>{% if item.product.has_flavours %}{{ strength|upper }}{% else %}N/A{% endif %}</p>
</td>

方法二:模板中使用自定义split过滤器拆分

如果不想修改后端逻辑,可以在Django模板中通过自定义过滤器拆分字符串:

步骤1:创建自定义过滤器

在你的Django应用下新建templatetags/custom_filters.py文件,内容如下:

from django import template

register = template.Library()

@register.filter(name='split')
def split_string(value, separator):
    """拆分字符串的自定义过滤器"""
    return value.split(separator)

步骤2:模板中使用

在模板顶部加载过滤器,然后拆分字符串提取对应部分:

{% load custom_filters %}

<td class="py-3">
   <p class="my-0"><strong>{{ item.product.name }}</strong></p>
   {% if item.product.has_flavours %}
       {% with item_parts=item.item|split:"_" %}
           <p class="my-0"><strong>Flavour:</strong>{{ item_parts.1|upper }}</p>
           <p class="my-0"><strong>Strength:</strong>{{ item_parts.2|upper }}</p>
       {% endwith %}
   {% else %}
       <p class="my-0"><strong>Flavour:</strong>N/A</p>
       <p class="my-0"><strong>Strength:</strong>N/A</p>
   {% endif %}
</td>

方法三:优化数据结构(长期最优)

如果可以修改数据模型或数据对象,建议保留item_id、flavour、strength三个独立字段,同时提供拼接后的item属性,避免后续拆分的麻烦:

比如在模型中定义:

from django.db import models

class YourItemModel(models.Model):
    item_id = models.CharField(max_length=64)
    flavour = models.CharField(max_length=64)
    strength = models.CharField(max_length=64)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    # 其他字段...

    @property
    def item(self):
        """返回拼接后的字符串"""
        return f'{self.item_id}_{self.flavour}_{self.strength}'

模板中直接访问独立字段:

<td class="py-3">
   <p class="my-0"><strong>{{ item.product.name }}</strong></p>
   <p class="my-0"><strong>Flavour:</strong>{% if item.product.has_flavours %}{{ item.flavour|upper }}{% else %}N/A{% endif %}</p>
   <p class="my-0"><strong>Strength:</strong>{% if item.product.has_flavours %}{{ item.strength|upper }}{% else %}N/A{% endif %}</p>
</td>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:03:24