【问题标题】:Django template split a string in two partsDjango模板将字符串分成两部分
【发布时间】: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 模板中拆分我的变量,并根据特定的字符只取第一部分或第二部分?

提前非常感谢

【问题讨论】:

标签: python django django-templates


【解决方案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 }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      相关资源
      最近更新 更多