在 Django 模板中循环遍历 CSV 字符串

Posted

技术标签:

【中文标题】在 Django 模板中循环遍历 CSV 字符串【英文标题】:Looping through CSV string in Django Template 【发布时间】:2017-12-14 17:10:26 【问题描述】:

所以我有一个变量是逗号分隔的字符串 ("val1,val2,val3"),我想遍历 Django 模板中的每个元素,例如:

% for host in network.hosts %
<h3>host</h3>
% endfor %

在这种情况下,我的 csv 变量是 network.hosts,我的预期结果是:

val1

val2

val3

我该怎么做呢?

【问题讨论】:

Django templates - split string to array的可能重复 【参考方案1】:

创建一个自定义模板标签并使用它。使用以下代码为您完成的工作创建一个新的模板标签。

@register.filter(name='split')
def split(value, arg):
    return value.split(arg)

然后你可以在你的模板中使用这个过滤器,就像下面的代码一样。

% with network.hosts|split:"," as hosts_list %
    % for host in hosts_list %
     <h3>host</h3>
    % endfor %
% endwith %

Django 官方网站将帮助您创建自定义模板标签https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

【讨论】:

它给了我一个错误,似乎不像'split',Django 版本:1.11.2 异常类型:TemplateSyntaxError 异常值:无效过滤器:'split'【参考方案2】:

实现此功能的一种方法是在您的模型中定义一个允许您拆分字符串的模型。

在您的 Python 代码中,您可以将此函数添加到您的模型中:

class Networks(models.Model):
    ...
    def hosts_as_list(self):
        return self.hosts.split(',')

那么您的模板可能如下所示:

% for host in network.hosts.hosts_as_list %
     host <br>
% endfor %

希望对你有帮助!

来源 - Django templates - split string to array

【讨论】:

以上是关于在 Django 模板中循环遍历 CSV 字符串的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历 Django 模板中的对象列表

循环遍历 Django 模板中的嵌套字典

尝试遍历 django 模板中的嵌套字典

循环遍历 django 模板中的 defaultdict(list) 结构

Django模板,如果它们的id等于父循环名称,则循环遍历项目

Django:遍历模板中的过滤列表