【问题标题】:splitting a variable within mako template在 mako 模板中拆分变量
【发布时间】:2023-03-16 17:55:01
【问题描述】:

以下适用于 Python 命令行

CELLULAR='1.2.3.4'
OCTETS=CELLULAR_IP.split('.')
FOURTH_OCTET=OCTETS[3]
T101_IP='10.1.1.'+FOURTH_OCTET
T102_IP='10.1.2.'+FOURTH_OCTET
T103_IP='10.1.3.'+FOURTH_OCTET
T104_IP='10.1.4.'+FOURTH_OCTET

但我在 Mako 模板中执行此操作时遇到各种麻烦。我想要完成的是将模板传递给变量中的 IP 地址,并获取该 IP 的最后一个八位字节并使用它来创建 4 个其他 IP。我想我可以把它放在这样的块中:

<%
OCTETS=CELLULAR_IP.split('.')
FOURTH_OCTET=OCTETS[3]
T101_IP='10.1.1.'+FOURTH_OCTET
T102_IP='10.1.2.'+FOURTH_OCTET
T103_IP='10.1.3.'+FOURTH_OCTET
T104_IP='10.1.4.'+FOURTH_OCTET
%>

但我收到“列表索引超出范围”错误。我认为这也可能导致变量范围的一些问题,我正试图解决这些问题。

我也尝试定义一个函数来执行此操作,但我有限的 Python 能力阻碍了我成功。

def get_octets(ip_string):
   try:
       OCTETS=CELLULAR_IP.split('.')
       return FOURTH_OCTET=OCTETS[3]
   except ValueError:
       return 0

关于我应该考虑什么来实现这一点有什么想法吗?

【问题讨论】:

  • 您是否尝试创建过滤器来执行此操作? docs.makotemplates.org/en/latest/filtering.html
  • Niklas,我查看了过滤,但在这里没有看到任何有用的信息。我确实设法使用以下方法解决了这个问题,但看起来很笨拙。 def get_octets(ip_string): try: return (ip_string).split('.')[3] except: # if ip_string won’t contain at least three . catch any exception and return -1 return -1
  • 好的。但是您可以让过滤器获取一个参数ip_string 并在模板中将其写得更干净,例如{{CELLULAR|get_octet(1)}},以获取第一个变量T101_IP,然后您将避免模板中松散的python代码,您的代码将变得可重用.如果你想基于一个创建其他四个变量,你可以使用过滤器,你的模板代码将是干净的,并且没有紧密耦合的纯 python。避免将 python 混入模板是一个很好的建议,因为如果这样做,您将无法重用代码并且会变得难以阅读。

标签: python mako


【解决方案1】:

这可行,但看起来很笨拙。

   def get_octets(ip_string):
        try:
           return (ip_string).split('.')[3]
        except:
           # if ip_string won’t contain at least three . catch any exception and return -1
           return -1

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 2018-12-02
    • 1970-01-01
    • 2013-04-16
    • 2011-05-08
    • 2011-12-26
    • 2012-05-28
    • 2012-03-05
    • 2019-06-14
    相关资源
    最近更新 更多