Przeglądaj źródła

Introduced a placeholder template filter

Jeremy Stretch 7 lat temu
rodzic
commit
045856c9ac

+ 3 - 21
netbox/templates/circuits/circuit.html

@@ -95,33 +95,15 @@
                 </tr>
                 <tr>
                     <td>Install Date</td>
-                    <td>
-                        {% if circuit.install_date %}
-                            {{ circuit.install_date }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ circuit.install_date|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Commit Rate</td>
-                    <td>
-                        {% if circuit.commit_rate %}
-                            {{ circuit.commit_rate|humanize_speed }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ circuit.commit_rate|humanize_speed|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if circuit.description %}
-                            {{ circuit.description }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ circuit.description|placeholder }}</td>
                 </tr>
             </table>
         </div>

+ 3 - 15
netbox/templates/circuits/inc/circuit_termination.html

@@ -79,29 +79,17 @@
                             <span class="text-muted">None</span>
                         {% endfor %}
                     {% else %}
-                        <span class="text-muted">N/A</span>
+                        <span class="text-muted">&mdash;</span>
                     {% endif %}
                 </td>
             </tr>
             <tr>
                 <td>Cross-Connect</td>
-                <td>
-                    {% if termination.xconnect_id %}
-                        {{ termination.xconnect_id }}
-                    {% else %}
-                        <span class="text-muted">N/A</span>
-                    {% endif %}
-                </td>
+                <td>{{ termination.xconnect_id|placeholder }}</td>
             </tr>
             <tr>
                 <td>Patch Panel/Port</td>
-                <td>
-                    {% if termination.pp_info %}
-                        {{ termination.pp_info }}
-                    {% else %}
-                        <span class="text-muted">N/A</span>
-                    {% endif %}
-                </td>
+                <td>{{ termination.pp_info|placeholder }}</td>
             </tr>
         </table>
     {% else %}

+ 5 - 29
netbox/templates/circuits/provider.html

@@ -67,23 +67,11 @@
             <table class="table table-hover panel-body attr-table">
                 <tr>
                     <td>ASN</td>
-                    <td>
-                        {% if provider.asn %}
-                            {{ provider.asn }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ provider.asn|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Account</td>
-                    <td>
-                        {% if provider.account %}
-                            {{ provider.account }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ provider.account|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Customer Portal</td>
@@ -91,29 +79,17 @@
                         {% if provider.portal_url %}
                             <a href="{{ provider.portal_url }}">{{ provider.portal_url }}</a>
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
                 <tr>
                     <td>NOC Contact</td>
-                    <td>
-                        {% if provider.noc_contact %}
-                            {{ provider.noc_contact|linebreaksbr }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ provider.noc_contact|linebreaksbr|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Admin Contact</td>
-                    <td>
-                        {% if provider.admin_contact %}
-                            {{ provider.admin_contact|linebreaksbr }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ provider.admin_contact|linebreaksbr|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Circuits</td>

+ 2 - 2
netbox/templates/dcim/cable.html

@@ -51,7 +51,7 @@
                     </tr>
                     <tr>
                         <td>Label</td>
-                        <td>{% if cable.label %}{{ cable.label }}{% else %}<span class="text-muted">N/A</span>{% endif %}</td>
+                        <td>{{ cable.labe|placeholder }}</td>
                     </tr>
                     <tr>
                         <td>Color</td>
@@ -69,7 +69,7 @@
                             {% if cable.length %}
                                 {{ cable.length }} {{ cable.get_length_unit_display }}
                             {% else %}
-                                <span class="text-muted">N/A</span>
+                                <span class="text-muted">&mdash;</span>
                             {% endif %}
                         </td>
                     </tr>

+ 5 - 17
netbox/templates/dcim/device.html

@@ -142,7 +142,7 @@
                             {% elif device.rack and device.device_type.u_height %}
                                 <span class="label label-warning">Not racked</span>
                             {% else %}
-                                <span class="text-muted">N/A</span>
+                                <span class="text-muted">&mdash;</span>
                             {% endif %}
                         </td>
                     </tr>
@@ -168,23 +168,11 @@
                     </tr>
                     <tr>
                         <td>Serial Number</td>
-                        <td>
-                            {% if device.serial %}
-                                <span>{{ device.serial }}</span>
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td><span>{{ device.serial|placeholder }}</span></td>
                     </tr>
                     <tr>
                         <td>Asset Tag</td>
-                        <td>
-                            {% if device.asset_tag %}
-                                <span>{{ device.asset_tag }}</span>
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td><span>{{ device.asset_tag|placeholder }}</span></td>
                     </tr>
                 </table>
             </div>
@@ -266,7 +254,7 @@
                                     <span>(NAT: {{ device.primary_ip4.nat_outside.address.ip }})</span>
                                 {% endif %}
                             {% else %}
-                                <span class="text-muted">N/A</span>
+                                <span class="text-muted">&mdash;</span>
                             {% endif %}
                         </td>
                     </tr>
@@ -281,7 +269,7 @@
                                     <span>(NAT: {{ device.primary_ip6.nat_outside.address.ip }})</span>
                                 {% endif %}
                             {% else %}
-                                <span class="text-muted">N/A</span>
+                                <span class="text-muted">&mdash;</span>
                             {% endif %}
                         </td>
                     </tr>

+ 3 - 14
netbox/templates/dcim/device_inventory.html

@@ -1,4 +1,5 @@
 {% extends 'dcim/device.html' %}
+{% load helpers %}
 
 {% block title %}{{ device }} - Inventory{% endblock %}
 
@@ -16,23 +17,11 @@
                     </tr>
                     <tr>
                         <td>Serial Number</td>
-                        <td>
-                            {% if device.serial %}
-                                <span>{{ device.serial }}</span>
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td><span>{{ device.serial|placeholder }}</span></td>
                     </tr>
                     <tr>
                         <td>Asset Tag</td>
-                        <td>
-                            {% if device.asset_tag %}
-                                <span>{{ device.asset_tag }}</span>
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td><span>{{ device.asset_tag|placeholder }}</span></td>
                     </tr>
                 </table>
             </div>

+ 2 - 8
netbox/templates/dcim/devicetype.html

@@ -74,13 +74,7 @@
                 </tr>
                 <tr>
                     <td>Part Number</td>
-                    <td>
-                        {% if devicetype.part_number %}
-                            {{ devicetype.part_number }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ devicetype.part_number|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Height (U)</td>
@@ -104,7 +98,7 @@
                         {% elif devicetype.subdevice_role == False %}
                             <label class="label label-info">Child</label>
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>

+ 6 - 42
netbox/templates/dcim/interface.html

@@ -82,33 +82,15 @@
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if interface.description %}
-                            <span>{{ interface.description }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ interface.description|placeholder }} </td>
                 </tr>
                 <tr>
                     <td>MTU</td>
-                    <td>
-                        {% if interface.mtu %}
-                            <span>{{ interface.mtu }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ interface.mtu|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>MAC Address</td>
-                    <td>
-                        {% if interface.mac_address %}
-                            <span>{{ interface.mac_address }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ interface.mac_address|placeholder }}</span></td>
                 </tr>
                 <tr>
                     <td>802.1Q Mode</td>
@@ -165,33 +147,15 @@
                             </tr>
                             <tr>
                                 <td>Description</td>
-                                <td>
-                                    {% if connected_interface.description %}
-                                        <span>{{ connected_interface.description }}</span>
-                                    {% else %}
-                                        <span class="text-muted">N/A</span>
-                                    {% endif %}
-                                </td>
+                                <td>{{ connected_interface.description|placeholder }}</td>
                             </tr>
                             <tr>
                                 <td>MTU</td>
-                                <td>
-                                    {% if connected_interface.mtu %}
-                                        <span>{{ connected_interface.mtu }}</span>
-                                    {% else %}
-                                        <span class="text-muted">N/A</span>
-                                    {% endif %}
-                                </td>
+                                <td>{{ connected_interface.mtu|placeholder }}</td>
                             </tr>
                             <tr>
                                 <td>MAC Address</td>
-                                <td>
-                                    {% if connected_interface.mac_address %}
-                                        <span>{{ connected_interface.mac_address }}</span>
-                                    {% else %}
-                                        <span class="text-muted">N/A</span>
-                                    {% endif %}
-                                </td>
+                                <td>{{ connected_interface.mac_address|placeholder }}</td>
                             </tr>
                             <tr>
                                 <td>802.1Q Mode</td>

+ 4 - 22
netbox/templates/dcim/rack.html

@@ -83,13 +83,7 @@
                 </tr>
                 <tr>
                     <td>Facility ID</td>
-                    <td>
-                        {% if rack.facility_id %}
-                            <span>{{ rack.facility_id }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ rack.facility_id|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Tenant</td>
@@ -123,23 +117,11 @@
                 </tr>
                 <tr>
                     <td>Serial Number</td>
-                    <td>
-                        {% if rack.serial %}
-                            <span>{{ rack.serial }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ rack.serial|placeholder }}</td>
                 </tr>
                     <tr>
                         <td>Asset Tag</td>
-                        <td>
-                            {% if rack.asset_tag %}
-                                <span>{{ rack.asset_tag }}</span>
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td>{{ rack.asset_tag|placeholder }}</td>
                     </tr>
                 <tr>
                     <td>Devices</td>
@@ -231,7 +213,7 @@
                                 {% if device.parent_bay %}
                                     <a href="{{ device.parent_bay.device.get_absolute_url }}">{{ device.parent_bay }}</a>
                                 {% else %}
-                                    <span class="text-muted">N/A</span>
+                                    <span class="text-muted">&mdash;</span>
                                 {% endif %}
                             </td>
                         </tr>

+ 10 - 40
netbox/templates/dcim/site.html

@@ -106,23 +106,11 @@
                 </tr>
                 <tr>
                     <td>Facility</td>
-                    <td>
-                        {% if site.facility %}
-                            {{ site.facility }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ site.facility|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>AS Number</td>
-                    <td>
-                        {% if site.asn %}
-                            {{ site.asn }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ site.asn|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Time Zone</td>
@@ -131,19 +119,13 @@
                             {{ site.time_zone }} (UTC {{ site.time_zone|tzoffset }})<br />
                             <small class="text-muted">Site time: {% timezone site.time_zone %}{% now "SHORT_DATETIME_FORMAT" %}{% endtimezone %}</small>
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if site.description %}
-                            {{ site.description }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ site.description|placeholder }}</td>
                 </tr>
             </table>
         </div>
@@ -163,19 +145,13 @@
                             </div>
                             <span>{{ site.physical_address|linebreaksbr }}</span>
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
                 <tr>
                     <td>Shipping Address</td>
-                    <td>
-                        {% if site.shipping_address %}
-                            <span>{{ site.shipping_address|linebreaksbr }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ site.shipping_address|linebreaksbr|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>GPS Coordinates</td>
@@ -188,19 +164,13 @@
                             </div>
                             <span>{{ site.latitude }}, {{ site.longitude }}</span>
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
                 <tr>
                     <td>Contact Name</td>
-                    <td>
-                        {% if site.contact_name %}
-                            <span>{{ site.contact_name }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ site.contact_name|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Contact Phone</td>
@@ -208,7 +178,7 @@
                         {% if site.contact_phone %}
                             <a href="tel:{{ site.contact_phone }}">{{ site.contact_phone }}</a>
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
@@ -218,7 +188,7 @@
                         {% if site.contact_email %}
                             <a href="mailto:{{ site.contact_email }}">{{ site.contact_email }}</a>
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>

+ 3 - 8
netbox/templates/dcim/virtualchassis_edit.html

@@ -1,4 +1,5 @@
 {% extends '_base.html' %}
+{% load helpers %}
 {% load form_helpers %}
 
 {% block content %}
@@ -52,16 +53,10 @@
                                             {% if device.rack %}
                                                 {{ device.rack }} / {{ device.position }}
                                             {% else %}
-                                                <span class="text-muted">N/A</span>
-                                            {% endif %}
-                                        </td>
-                                        <td>
-                                            {% if device.serial %}
-                                                {{ device.serial }}
-                                            {% else %}
-                                                <span class="text-muted">N/A</span>
+                                                <span class="text-muted">&mdash;</span>
                                             {% endif %}
                                         </td>
+                                        <td>{{ device.serial|placeholder }}</td>
                                         <td>
                                             {{ form.vc_position }}
                                             {% if form.vc_position.errors %}

+ 1 - 7
netbox/templates/extras/configcontext.html

@@ -55,13 +55,7 @@
                     </tr>
                     <tr>
                         <td>Description</td>
-                        <td>
-                            {% if configcontext.description %}
-                                {{ configcontext.description }}
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td>{{ configcontext.description|placeholder }}</td>
                     </tr>
                     <tr>
                         <td>Active</td>

+ 1 - 1
netbox/templates/inc/custom_fields_panel.html

@@ -20,7 +20,7 @@
                             {% elif field.required %}
                                 <span class="text-warning">Not defined</span>
                             {% else %}
-                                <span class="text-muted">N/A</span>
+                                <span class="text-muted">&mdash;</span>
                             {% endif %}
                         </td>
                     </tr>

+ 2 - 14
netbox/templates/ipam/aggregate.html

@@ -75,23 +75,11 @@
                 </tr>
                 <tr>
                     <td>Date Added</td>
-                    <td>
-                        {% if aggregate.date_added %}
-                            <span>{{ aggregate.date_added }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ aggregate.date_added|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if aggregate.description %}
-                            <span>{{ aggregate.description }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ aggregate.description|placeholder }}</td>
                 </tr>
             </table>
         </div>

+ 2 - 8
netbox/templates/ipam/ipaddress.html

@@ -105,13 +105,7 @@
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if ipaddress.description %}
-                            <span>{{ ipaddress.description }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ ipaddress.description|placeholder }}</td>
                 </tr>
                 <tr>
                     <td>Assignment</td>
@@ -119,7 +113,7 @@
                         {% if ipaddress.interface %}
                             <span><a href="{{ ipaddress.interface.parent.get_absolute_url }}">{{ ipaddress.interface.parent }}</a> ({{ ipaddress.interface }})</span>
                         {% else %}
-                            <span class="text-muted">None</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>

+ 1 - 7
netbox/templates/ipam/prefix.html

@@ -160,13 +160,7 @@
                     </tr>
                     <tr>
                         <td>Description</td>
-                        <td>
-                            {% if prefix.description %}
-                                <span>{{ prefix.description }}</span>
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td>{{ prefix.description|placeholder }}</td>
                     </tr>
                     <tr>
                         <td>Is a pool</td>

+ 1 - 7
netbox/templates/ipam/service.html

@@ -70,13 +70,7 @@
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if service.description %}
-                            {{ service.description }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ service.description|placeholder }}</td>
                 </tr>
 		    </table>
         </div>

+ 1 - 7
netbox/templates/ipam/vlan.html

@@ -129,13 +129,7 @@
                     </tr>
                     <tr>
                         <td>Description</td>
-                        <td>
-                            {% if vlan.description %}
-                                {{ vlan.description }}
-                            {% else %}
-                                <span class="text-muted">N/A</span>
-                            {% endif %}
-                        </td>
+                        <td>{{ vlan.description|placeholder }}</td>
                     </tr>
                 </table>
             </div>

+ 1 - 7
netbox/templates/ipam/vrf.html

@@ -82,13 +82,7 @@
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if vrf.description %}
-                            <span>{{ vrf.description }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ vrf.description|placeholder }}</td>
                 </tr>
 		    </table>
         </div>

+ 1 - 7
netbox/templates/secrets/secret.html

@@ -59,13 +59,7 @@
                 </tr>
                 <tr>
                     <td>Name</td>
-                    <td>
-                        {% if secret.name %}
-                            <span>{{ secret.name }}</span>
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ secret.name|placeholder }}</td>
                 </tr>
             </table>
         </div>

+ 1 - 7
netbox/templates/tenancy/tenant.html

@@ -71,13 +71,7 @@
                 </tr>
                 <tr>
                     <td>Description</td>
-                    <td>
-                        {% if tenant.description %}
-                            {{ tenant.description }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ tenant.description|placeholder }}</td>
                 </tr>
             </table>
         </div>

+ 5 - 11
netbox/templates/virtualization/virtualmachine.html

@@ -116,7 +116,7 @@
                                 <span>(NAT: {{ virtualmachine.primary_ip4.nat_outside.address.ip }})</span>
                             {% endif %}
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
@@ -131,7 +131,7 @@
                                 <span>(NAT: {{ virtualmachine.primary_ip6.nat_outside.address.ip }})</span>
                             {% endif %}
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
@@ -181,13 +181,7 @@
             <table class="table table-hover panel-body attr-table">
                 <tr>
                     <td><i class="fa fa-tachometer"></i> Virtual CPUs</td>
-                    <td>
-                        {% if virtualmachine.vcpus %}
-                            {{ virtualmachine.vcpus }}
-                        {% else %}
-                            <span class="text-muted">N/A</span>
-                        {% endif %}
-                    </td>
+                    <td>{{ virtualmachine.vcpus|placeholder }}</td>
                 </tr>
                 <tr>
                     <td><i class="fa fa-microchip"></i> Memory</td>
@@ -195,7 +189,7 @@
                         {% if virtualmachine.memory %}
                             {{ virtualmachine.memory }} MB
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>
@@ -205,7 +199,7 @@
                         {% if virtualmachine.disk %}
                             {{ virtualmachine.disk }} GB
                         {% else %}
-                            <span class="text-muted">N/A</span>
+                            <span class="text-muted">&mdash;</span>
                         {% endif %}
                     </td>
                 </tr>

+ 12 - 0
netbox/utilities/templatetags/helpers.py

@@ -22,6 +22,16 @@ def oneline(value):
     """
     return value.replace('\n', ' ')
 
+@register.filter()
+def placeholder(value):
+    """
+    Render a muted placeholder if value equates to False.
+    """
+    if value:
+        return value
+    placeholder = '<span class="text-muted">&mdash;</span>'
+    return mark_safe(placeholder)
+
 
 @register.filter()
 def getlist(value, arg):
@@ -97,6 +107,8 @@ def humanize_speed(speed):
         100000 => "100 Mbps"
         10000000 => "10 Gbps"
     """
+    if not speed:
+        return ''
     if speed >= 1000000000 and speed % 1000000000 == 0:
         return '{} Tbps'.format(int(speed / 1000000000))
     elif speed >= 1000000 and speed % 1000000 == 0: