【问题标题】:Dynamically adjust value based on length of variable in Jinja2根据 Jinja2 中变量的长度动态调整值
【发布时间】:2021-08-11 23:10:57
【问题描述】:

我有以下代码用于将文本写入文件。当inventory_hostname 的长度始终相同时,此方法有效。

{{ inventory_hostname }}{{ "%-69s" | format(file['path'] | replace('E:', '') | replace('\\','/') | truncate(63,true,'')) }}moretext

我想根据inventory_hostname 的长度来设置文本部分的长度。像这样的。

{{ inventory_hostname }}{{ "%-{{ 75 - inventory_hostname|length }}s" | format(file['path'] | replace('E:', '') | replace('\\','/') | truncate(63,true,'')) }}moretext

我需要将结果始终排列在特定列上。

例如:

hostname1programfiles/program/dll   moretext
host1programfiles/program/note      moretext
hostnameisreallylong/programfile/p  moretext

【问题讨论】:

    标签: python ansible jinja2


    【解决方案1】:

    你可以使用 ljust() 来调整字符串的大小

    >>> 'hello'.ljust(20))[0:20]
    'hello               '
    >>> 'hello world'.ljust(20))[0:20]
    'hello world         '
    >>> 'hello world this is a long text'.ljust(20)[0:20]
    'hello world this is '
    

    参考:https://docs.python.org/3/library/stdtypes.html#str.ljust

    【讨论】:

    • 据我所知,它仅适用于 Jinja2 中的单个变量。我需要一种可以将其应用于两个变量的方法,或者我需要在 Jinja2 中组合变量的方法。当inventory_hostname 的长度发生变化时,它会将“moretext”推送到不同的列中。我需要inventory_hostname 的整个值,并且我需要截断文件['path'],这样无论它从哪里开始,更多文本都会出现在同一列上。
    • 更新:我使用“set”在 Jinja2 中使用字符串连接创建变量。那行得通。谢谢!
    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 2015-01-27
    • 2011-01-26
    • 1970-01-01
    • 2018-06-03
    • 2020-11-23
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多