erb 模板在代码评估中打印换行符
erb template print newline inside code evaluation
生成动态内容文件的 puppet erb 模板:
<%
if @interfaces.count(',') > 0 then
counter = 0
@interfaces.split(',').each do |int|
next if int == "lo"
if has_variable?("ipaddress_#{int}")
ip = scope.lookupvar("ipaddress_#{int}")
mask = scope.lookupvar("netmask_#{int}")
cidr = scope.call_function('netmask_to_masklen',["#{mask}"])
cidr_to_n = scope.call_function('cidr_to_network',["#{ip}/#{cidr}"])
if ip =~ /192.168.0/
x = ip
$i1 = int
$c_to_n1 = cidr_to_n
else
$y = ip
$i2 = int
$c_to_n2 = cidr_to_n
end
end
end
end -%>
ip route add <%= $c_to_n1 %>/<%= $cidr %> dev <%=$i1%> src <%=$x%> table 192.168.0_RT
ip route add default via 192.168.0.1 dev <%=$i1%> table 192.168.0_RT
ip route add <%= $c_to_n2 %>/<%= $cidr %> dev <%=$i2%> src <%=$y%> table 192.168.168_RT
ip route add default via 192.168.168.1 dev <%=$i2%> table 192.168.168_RT
ip rule add from <%= $x %>/32 table 192.168.0_RT
ip rule add from <%= $y %>/32 table 192.168.168_RT
至于现在代码按预期工作,但是如果我将行(ip route...)放在 if/else 之间,所有内容都打印在同一行 w/o 换行符上。
所以主要的问题是如何让代码看起来更简洁:)
如果我理解正确,要在 if 块之间呈现这些行,您需要添加一个 html 换行符
标记,然后将您的字符串标记为 #html_safe 或使用视图中的“#h”助手。
例如:
<% (1..4).each do |i| %>
<% if i.even? %>
<%= h "#{i} is even<br>" %>
<% else %>
<%= h "#{i} id odd<br>" %>
<% end %>
<% end %>
应该创建如下呈现的 html:
1 is odd
2 is even
3 is odd
4 is even
生成动态内容文件的 puppet erb 模板:
<%
if @interfaces.count(',') > 0 then
counter = 0
@interfaces.split(',').each do |int|
next if int == "lo"
if has_variable?("ipaddress_#{int}")
ip = scope.lookupvar("ipaddress_#{int}")
mask = scope.lookupvar("netmask_#{int}")
cidr = scope.call_function('netmask_to_masklen',["#{mask}"])
cidr_to_n = scope.call_function('cidr_to_network',["#{ip}/#{cidr}"])
if ip =~ /192.168.0/
x = ip
$i1 = int
$c_to_n1 = cidr_to_n
else
$y = ip
$i2 = int
$c_to_n2 = cidr_to_n
end
end
end
end -%>
ip route add <%= $c_to_n1 %>/<%= $cidr %> dev <%=$i1%> src <%=$x%> table 192.168.0_RT
ip route add default via 192.168.0.1 dev <%=$i1%> table 192.168.0_RT
ip route add <%= $c_to_n2 %>/<%= $cidr %> dev <%=$i2%> src <%=$y%> table 192.168.168_RT
ip route add default via 192.168.168.1 dev <%=$i2%> table 192.168.168_RT
ip rule add from <%= $x %>/32 table 192.168.0_RT
ip rule add from <%= $y %>/32 table 192.168.168_RT
至于现在代码按预期工作,但是如果我将行(ip route...)放在 if/else 之间,所有内容都打印在同一行 w/o 换行符上。 所以主要的问题是如何让代码看起来更简洁:)
如果我理解正确,要在 if 块之间呈现这些行,您需要添加一个 html 换行符
标记,然后将您的字符串标记为 #html_safe 或使用视图中的“#h”助手。
例如:
<% (1..4).each do |i| %>
<% if i.even? %>
<%= h "#{i} is even<br>" %>
<% else %>
<%= h "#{i} id odd<br>" %>
<% end %>
<% end %>
应该创建如下呈现的 html:
1 is odd
2 is even
3 is odd
4 is even