【发布时间】: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 混入模板是一个很好的建议,因为如果这样做,您将无法重用代码并且会变得难以阅读。