Skip to content

导出模板

NetBox允许用户定义自定义模板,用于在导出对象时使用。要创建导出模板,请导航到自定义 > 导出模板。

每个导出模板与某种类型的对象相关联。例如,如果您为VLAN创建一个导出模板,您的自定义模板将显示在VLAN列表的“导出”按钮下。每个导出模板必须有一个名称,并可以选择指定特定的导出MIME类型和/或文件扩展名。

导出模板必须使用Jinja2编写。

Note

名称 table 保留供内部使用。

Warning

导出模板是使用用户提交的代码呈现的,根据某些条件可能存在安全风险。仅授予受信任的用户创建或修改导出模板的权限。

在渲染导出模板时,从数据库返回的对象列表存储在 queryset 变量中,通常您会使用 for 循环对其进行迭代。可以按名称访问对象属性。例如:

{% for rack in queryset %}
Rack: {{ rack.name }}
Site: {{ rack.site.name }}
Height: {{ rack.u_height }}U
{% endfor %}

要在模板中访问对象的自定义字段,请使用 cf 属性。例如,{{ obj.cf.color }} 将返回 obj 上名为 color 的自定义字段的值(如果有的话)。

如果需要在导出模板中使用配置上下文数据,您应该使用函数 get_config_context 来获取所有配置上下文数据。例如:

{% for server in queryset %}
{% set data = server.get_config_context() %}
{{ data.syslog }}
{% endfor %}

导出模板的 as_attachment 属性控制其在渲染时的行为。如果为 true,则渲染的内容将作为可下载文件返回给用户。如果为 false,则将在浏览器中显示它(例如,用于生成HTML内容时可能会很方便)。

每个导出模板可以选择定义一个MIME类型和文件扩展名。默认MIME类型为 text/plain

REST API 集成

当需要提供身份验证凭据(例如,当启用了 LOGIN_REQUIRED 时)时,建议通过REST API呈现导出模板。这允许客户端指定身份验证令牌。要通过REST API呈现导出模板,请对模型的列表端点进行 GET 请求,并附加指定导出模板名称的 export 参数。例如:

GET /api/dcim/sites/?export=MyTemplateName

请注意,响应的主体将仅包含已呈现的导出模板内容,而不是JSON对象或列表。

示例

以下是一个设备导出模板示例,将从设备列表生成一个简单的Nagios配置。

{% for device in queryset %}{% if device.status and device.primary_ip %}define host{
        use                     generic-switch
        host_name               {{ device.name }}
        address                 {{ device.primary_ip.address.ip }}
}
{% endif %}{% endfor %}

生成的输出将类似于以下内容:

define host{
        use                     generic-switch
        host_name               switch1
        address                 192.0.2.1
}
define host{
        use                     generic-switch
        host_name               switch2
        address                 192.0.2.2
}
define host{
        use                     generic-switch
        host_name               switch3
        address                 192.0.2.3
}