Django模板将字符串分成两部分

Posted

技术标签:

【中文标题】Django模板将字符串分成两部分【英文标题】:Django template split a string in two parts 【发布时间】:2020-12-23 08:45:48 【问题描述】:

在我的 Django 项目中,我需要根据特定字符将字符串拆分为模板。

str1 = "Part1 - Part2"

在纯 python 中我会这样做:

part1 = str1.split("-",1)[0]
part2 = str1.split("-",1)[1]

我尝试使用 django 模板:

 str1|split:'-'|first 

但我给出一个错误:

过滤器无效:'split'

有人可以帮助我在 django 模板中拆分我的变量,并根据特定的字符只取第一部分或第二部分?

提前非常感谢

【问题讨论】:

这能回答你的问题吗? Django templates - split string to array 我猜Django中没有拆分标签。您将需要自己实现它。我找到了这个解决方案moonbooks.org/Articles/… 嗯抱歉,但我不明白如何根据该链接解决我的问题。谢谢 这个***问题-***.com/questions/8317537/…回答你的问题了吗? 您可以在 django 中实现自己的拆分过滤器。 docs.djangoproject.com/en/3.1/howto/custom-template-tags 这是实现自定义模板标签的官方文档 【参考方案1】:

使用templatetags split 会是这样的:

因为templatetags 只需要one argument,但是对于最大限制的拆分,我们需要通过two arguments。 在这种情况下,我们可以将两个参数组合为一个字符串并使用分隔符。 这里例如我使用|||| 作为两个参数分隔符

在你的应用文件夹中创建一个文件夹,命名为templatetags

在那里创建一个文件split.py

from django import template
register = template.Library()

@register.filter
def split(splitable, split_at):
    # split with max limit
    if len(split_at.split("||||")) == 2:
        return splitable.split(split_at.split("||||")[0], int(split_at.split("||||")[1]))
    
    # normal split without max limitation
    return splitable.split(split_at)

现在最好重新启动一次服务器。

然后在模板中做:

% load split %

<!-- first element no split limit -->
 str1|split:"-"|first 

<!-- first element with split limit, in following example, the limit is 1 -->
 str1|split:"-||||1"|first 

<!-- last element no split limit -->
 str1|split:"-"|last 

<!-- last element with split limit, in following example, the limit is 1 -->
 str1|split:"-||||1"|last 

<!-- element by index no split limit -->
% with str1|split:"-" as split_data % split_data.0 % endwith %

<!-- element by index with split limit, in following example, the limit is 1 -->
% with str1|split:"-||||1" as split_data % split_data.0 % endwith %

【讨论】:

【参考方案2】:

在您的模板中,您需要直接使用转换后的值,因为无法过滤来拆分模板中的文本

 part1   part2 

【讨论】:

以上是关于Django模板将字符串分成两部分的主要内容,如果未能解决你的问题,请参考以下文章

将字符串分成两部分(REALBASIC)

正则表达式 - 如何将此字符串分成两部分

需要在java中将字符串分成两部分

PL/SQL 程序将代码分成两部分

当我想要一列时,Python to CSV 将字符串分成两列

Django 模板中的字符串操作