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模板将字符串分成两部分的主要内容,如果未能解决你的问题,请参考以下文章