【问题标题】:Spacing issue when render template through python通过python渲染模板时的间距问题
【发布时间】:2019-08-12 11:37:35
【问题描述】:

当我使用 Python 渲染我的模板时,我遇到了奇怪的间距问题。

我尝试了ident()trim(),但都没有产生所需的输出。

说明:将up接口的数量与F5类中定义的接口相匹配

loader=jinja2.FileSystemLoader(os.getcwd())
jenv=jinja2.Environment(loader=loader, trim_blocks=True, 
lstrip_blocks=False)
template=jenv.get_template('health_checks_temp.j2')

print("    +---------------------------------------------------------------------------------+\n    |                          F5 INTERFACE CHECKS                                    |\n    +---------------------------------------------------------------------------------+")
hostnames=['SSL222VP002400','ssl224vp222001','ssl224vp002400',] # Removed some of the items 
for i in hostnames:
    mgmt = ManagementRoot(i, 'USERNAME','PASSWORD')
    command='tmsh show net interface all | grep -i up | wc -l'
    cmd = "-c \'" + command + "\'"
    x = mgmt.tm.util.bash.exec_cmd('run', utilCmdArgs=cmd)
    data=(x.commandResult).split()
    if data[0] == getattr(F5,str(i)+'_interface'):
        print(template.render(dev_name=str(i), result='PASSED'))
    else:
        print(template.render(dev_name=str(i), result='FAILED'))

模板

 {{dev_name}}                                                {{result}}
+---------------------------------------------------------------------------------+

-sh-4.1$

预期

-sh-4.1$ python3.6 SECURITY-HEALTH-REPORT.py
    +---------------------------------------------------------------------------------+
    |                          F5 INTERFACE CHECKS                                    |
    +---------------------------------------------------------------------------------+
     SSL222VP002400                                      PASSED
    +---------------------------------------------------------------------------------+
     ssl224vp222001                                      PASSED
    +---------------------------------------------------------------------------------+
     ssl224vp002400                                      PASSED
    +---------------------------------------------------------------------------------+
     lbseks241                                           PASSED
    +---------------------------------------------------------------------------------+
     fwlnnp152                                           PASSED
    +---------------------------------------------------------------------------------+
     lbsekp242                                           PASSED
    +---------------------------------------------------------------------------------+

实际

-sh-4.1$ python3.6 SECURITY-HEALTH-REPORT.py
    +---------------------------------------------------------------------------------+
    |                          F5 INTERFACE CHECKS                                    |
    +---------------------------------------------------------------------------------+
     SSL222VP002400                                              PASSED
    +---------------------------------------------------------------------------------+
     ssl224vp222001                                              PASSED
    +---------------------------------------------------------------------------------+
     ssl224vp002400                                              PASSED
    +---------------------------------------------------------------------------------+
     lbseks241                                           PASSED
    +---------------------------------------------------------------------------------+
     fwlnnp152                                           PASSED
    +---------------------------------------------------------------------------------+
     lbsekp242                                           PASSED
    +---------------------------------------------------------------------------------+

【问题讨论】:

  • 你好,Dpac。你能修复代码的缩进吗?
  • 对不起,我该怎么做?
  • @DPac 您可以编辑您的帖子,然后在“for”之前和“FAILED”之后放置 3 个反引号。我猜你剪切并粘贴了正确的 python 代码,然后在“for”循环之前添加了空格以使其成为代码的一部分。您可以去掉这些空格并添加反引号。
  • 终于完成了 ;)

标签: python-3.x jinja2


【解决方案1】:

问题是您的 Jinja2 模板不适应变量的长度。由于您的文件中有这一行,您可以使用 python 代码来完成。考虑到您希望dev_name 和结果之间的间距为 30:

# With ljust
print(dev_name.ljust(30) + result)

# With format
print('{:<30}{}'.format(dev_name, result))

#For Python3 with f-string
print(f'{dev_name:<30}{result}')

如果您想继续使用 Jinja2 模板,您可以使用 builtin filter format,正如本文所述:Jinja2 Padding and Aligning Strings 它看起来像

 {{ "%-30s" | format(dev_name) }} {{result}}
+---------------------------------------------------------------------------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2015-01-06
    • 2021-11-24
    • 2012-01-11
    • 2019-11-18
    • 2014-12-25
    相关资源
    最近更新 更多