template_code.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. CABLETERMINATION = """
  2. {% if value %}
  3. {% if value.parent_object %}
  4. <a href="{{ value.parent_object.get_absolute_url }}">{{ value.parent_object }}</a>
  5. <i class="mdi mdi-chevron-right"></i>
  6. {% endif %}
  7. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  8. {% else %}
  9. &mdash;
  10. {% endif %}
  11. """
  12. CABLE_LENGTH = """
  13. {% if record.length %}{{ record.length }} {{ record.get_length_unit_display }}{% else %}&mdash;{% endif %}
  14. """
  15. CABLE_TERMINATION_PARENT = """
  16. {% if value.device %}
  17. <a href="{{ value.device.get_absolute_url }}">{{ value.device }}</a>
  18. {% elif value.circuit %}
  19. <a href="{{ value.circuit.get_absolute_url }}">{{ value.circuit }}</a>
  20. {% elif value.power_panel %}
  21. <a href="{{ value.power_panel.get_absolute_url }}">{{ value.power_panel }}</a>
  22. {% endif %}
  23. """
  24. DEVICE_LINK = """
  25. <a href="{% url 'dcim:device' pk=record.pk %}">
  26. {{ record.name|default:'<span class="badge bg-info">Unnamed device</span>' }}
  27. </a>
  28. """
  29. DEVICEBAY_STATUS = """
  30. {% if record.installed_device_id %}
  31. <span class="badge bg-{{ record.installed_device.get_status_class }}">
  32. {{ record.installed_device.get_status_display }}
  33. </span>
  34. {% else %}
  35. <span class="badge bg-secondary">Vacant</span>
  36. {% endif %}
  37. """
  38. INTERFACE_IPADDRESSES = """
  39. {% for ip in record.ip_addresses.all %}
  40. <a href="{{ ip.get_absolute_url }}">{{ ip }}</a><br />
  41. {% endfor %}
  42. """
  43. INTERFACE_TAGGED_VLANS = """
  44. {% if record.mode == 'tagged' %}
  45. {% for vlan in record.tagged_vlans.all %}
  46. <a href="{{ vlan.get_absolute_url }}">{{ vlan }}</a><br />
  47. {% endfor %}
  48. {% elif record.mode == 'tagged-all' %}
  49. All
  50. {% else %}
  51. &mdash;
  52. {% endif %}
  53. """
  54. POWERFEED_CABLE = """
  55. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  56. <a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace">
  57. <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
  58. </a>
  59. """
  60. POWERFEED_CABLETERMINATION = """
  61. <a href="{{ value.parent_object.get_absolute_url }}">{{ value.parent_object }}</a>
  62. <i class="mdi mdi-chevron-right"></i>
  63. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  64. """
  65. LOCATION_ELEVATIONS = """
  66. <a href="{% url 'dcim:rack_elevation_list' %}?site={{ record.site.slug }}&location_id={{ record.pk }}" class="btn btn-sm btn-primary" title="View elevations">
  67. <i class="mdi mdi-server"></i>
  68. </a>
  69. """
  70. #
  71. # Device component buttons
  72. #
  73. CONSOLEPORT_BUTTONS = """
  74. {% if record.cable %}
  75. <a href="{% url 'dcim:consoleport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  76. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  77. {% if perms.dcim.delete_cable %}
  78. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  79. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  80. </a>
  81. {% endif %}
  82. {% elif perms.dcim.add_cable %}
  83. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  84. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  85. <span class="dropdown">
  86. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  87. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  88. </button>
  89. <ul class="dropdown-menu dropdown-menu-end">
  90. <li><a class="dropdown-item" href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Console Server Port</a></li>
  91. <li><a class="dropdown-item" href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Front Port</a></li>
  92. <li><a class="dropdown-item" href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Rear Port</a></li>
  93. </ul>
  94. </span>
  95. {% else %}
  96. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  97. {% endif %}
  98. """
  99. CONSOLESERVERPORT_BUTTONS = """
  100. {% if record.cable %}
  101. <a href="{% url 'dcim:consoleserverport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  102. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  103. {% if perms.dcim.delete_cable %}
  104. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  105. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  106. </a>
  107. {% endif %}
  108. {% elif perms.dcim.add_cable %}
  109. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  110. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  111. <span class="dropdown">
  112. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  113. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  114. </button>
  115. <ul class="dropdown-menu dropdown-menu-end">
  116. <li><a class="dropdown-item" href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Console Port</a></li>
  117. <li><a class="dropdown-item" href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Front Port</a></li>
  118. <li><a class="dropdown-item" href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Rear Port</a></li>
  119. </ul>
  120. </span>
  121. {% else %}
  122. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  123. {% endif %}
  124. """
  125. POWERPORT_BUTTONS = """
  126. {% if record.cable %}
  127. <a href="{% url 'dcim:powerport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  128. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  129. {% if perms.dcim.delete_cable %}
  130. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  131. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  132. </a>
  133. {% endif %}
  134. {% elif perms.dcim.add_cable %}
  135. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  136. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  137. <span class="dropdown">
  138. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  139. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  140. </button>
  141. <ul class="dropdown-menu dropdown-menu-end">
  142. <li><a class="dropdown-item" href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-outlet' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Outlet</a></li>
  143. <li><a class="dropdown-item" href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-feed' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Feed</a></li>
  144. </ul>
  145. </span>
  146. {% else %}
  147. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  148. {% endif %}
  149. """
  150. POWEROUTLET_BUTTONS = """
  151. {% if record.cable %}
  152. <a href="{% url 'dcim:poweroutlet_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  153. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  154. {% if perms.dcim.delete_cable %}
  155. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  156. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  157. </a>
  158. {% endif %}
  159. {% elif perms.dcim.add_cable %}
  160. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  161. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  162. {% if not record.mark_connected %}
  163. <a href="{% url 'dcim:poweroutlet_connect' termination_a_id=record.pk termination_b_type='power-port' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Connect" class="btn btn-success btn-sm">
  164. <i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
  165. </a>
  166. {% else %}
  167. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  168. {% endif %}
  169. {% endif %}
  170. """
  171. INTERFACE_BUTTONS = """
  172. {% if perms.ipam.add_ipaddress %}
  173. <a href="{% url 'ipam:ipaddress_add' %}?interface={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}" class="btn btn-sm btn-success" title="Add IP address">
  174. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  175. </a>
  176. {% endif %}
  177. {% if record.cable %}
  178. <a href="{% url 'dcim:interface_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  179. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  180. {% if perms.dcim.delete_cable %}
  181. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  182. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  183. </a>
  184. {% endif %}
  185. {% elif record.is_connectable and perms.dcim.add_cable %}
  186. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  187. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  188. {% if not record.mark_connected %}
  189. <span class="dropdown">
  190. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  191. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  192. </button>
  193. <ul class="dropdown-menu dropdown-menu-end">
  194. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Interface</a></li>
  195. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Front Port</a></li>
  196. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Rear Port</a></li>
  197. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Circuit Termination</a></li>
  198. </ul>
  199. </span>
  200. {% else %}
  201. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  202. {% endif %}
  203. {% endif %}
  204. """
  205. FRONTPORT_BUTTONS = """
  206. {% if record.cable %}
  207. <a href="{% url 'dcim:frontport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  208. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  209. {% if perms.dcim.delete_cable %}
  210. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  211. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  212. </a>
  213. {% endif %}
  214. {% elif perms.dcim.add_cable %}
  215. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  216. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  217. {% if not record.mark_connected %}
  218. <span class="dropdown">
  219. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  220. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  221. </button>
  222. <ul class="dropdown-menu dropdown-menu-end">
  223. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Interface</a></li>
  224. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Server Port</a></li>
  225. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Port</a></li>
  226. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Front Port</a></li>
  227. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Rear Port</a></li>
  228. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Circuit Termination</a></li>
  229. </ul>
  230. </span>
  231. {% else %}
  232. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  233. {% endif %}
  234. {% endif %}
  235. """
  236. REARPORT_BUTTONS = """
  237. {% if record.cable %}
  238. <a href="{% url 'dcim:rearport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  239. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  240. {% if perms.dcim.delete_cable %}
  241. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  242. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  243. </a>
  244. {% endif %}
  245. {% elif perms.dcim.add_cable %}
  246. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  247. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  248. {% if not record.mark_connected %}
  249. <span class="dropdown">
  250. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  251. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  252. </button>
  253. <ul class="dropdown-menu dropdown-menu-end">
  254. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Interface</a></li>
  255. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Front Port</a></li>
  256. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Rear Port</a></li>
  257. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Circuit Termination</a></li>
  258. </ul>
  259. </span>
  260. {% else %}
  261. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  262. {% endif %}
  263. {% endif %}
  264. """
  265. DEVICEBAY_BUTTONS = """
  266. {% if perms.dcim.change_devicebay %}
  267. {% if record.installed_device %}
  268. <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  269. <i class="mdi mdi-minus-thick" aria-hidden="true" title="Remove device"></i>
  270. </a>
  271. {% else %}
  272. <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-success btn-sm">
  273. <i class="mdi mdi-plus-thick" aria-hidden="true" title="Install device"></i>
  274. </a>
  275. {% endif %}
  276. {% endif %}
  277. """