Browse Source

Introduced a common template for object editing

Jeremy Stretch 9 years ago
parent
commit
950a6ea7b2

+ 3 - 0
netbox/ipam/forms.py

@@ -17,6 +17,9 @@ class VRFForm(forms.ModelForm, BootstrapMixin):
     class Meta:
         model = VRF
         fields = ['name', 'rd', 'description']
+        labels = {
+            'rd': "RD",
+        }
         help_texts = {
             'rd': "Route distinguisher in any format",
         }

+ 32 - 72
netbox/templates/circuits/circuit_edit.html

@@ -1,86 +1,46 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing {{ obj }}{% else %}Add a circuit{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>Editing {{ obj.provider }} circuit {{ obj.cid }}</h1>
-{% else %}
-	<h1>Add a Circuit</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Details</strong></div>
+        <div class="panel-body">
+            {% render_field form.provider %}
+            {% render_field form.cid %}
+            {% render_field form.type %}
+            {% render_field form.install_date %}
+            {% render_field form.port_speed %}
+            {% render_field form.commit_rate %}
+            {% render_field form.xconnect_id %}
+            {% render_field form.pp_info %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Details</strong></div>
-                <div class="panel-body">
-                    {% render_field form.cid %}
-                    {% render_field form.type %}
-                    {% render_field form.provider %}
-                    {% render_field form.install_date %}
-                    {% render_field form.port_speed %}
-                    {% render_field form.commit_rate %}
-                    {% render_field form.xconnect_id %}
-                    {% render_field form.pp_info %}
-                </div>
-            </div>
-        </div>
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Termination</strong></div>
-                <div class="panel-body">
-                    {% render_field form.site %}
-                    <ul class="nav nav-tabs" role="tablist">
-                        <li role="presentation" class="active"><a href="#select" aria-controls="home" role="tab" data-toggle="tab">Select</a></li>
-                        <li role="presentation"><a href="#search" aria-controls="search" role="tab" data-toggle="tab">Search</a></li>
-                    </ul>
-                    <div class="tab-content">
-                        <div class="tab-pane active" id="select">
-                            {% render_field form.rack %}
-                            {% render_field form.device %}
-                        </div>
-                        <div class="tab-pane" id="search">
-                            {% render_field form.livesearch %}
-                        </div>
-                    </div>
-                    {% render_field form.interface %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Termination</strong></div>
+        <div class="panel-body">
+            {% render_field form.site %}
+            <ul class="nav nav-tabs" role="tablist">
+                <li role="presentation" class="active"><a href="#select" aria-controls="home" role="tab" data-toggle="tab">Select</a></li>
+                <li role="presentation"><a href="#search" aria-controls="search" role="tab" data-toggle="tab">Search</a></li>
+            </ul>
+            <div class="tab-content">
+                <div class="tab-pane active" id="select">
+                    {% render_field form.rack %}
+                    {% render_field form.device %}
                 </div>
-            </div>
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Comments</strong></div>
-                <div class="panel-body">
-                    {% render_field form.comments %}
+                <div class="tab-pane" id="search">
+                    {% render_field form.livesearch %}
                 </div>
             </div>
+            {% render_field form.interface %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-12 text-right">
-            {% if obj %}
-                <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'circuits:circuit' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-            {% else %}
-                <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                <a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
-            {% endif %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Comments</strong></div>
+        <div class="panel-body">
+            {% render_field form.comments %}
         </div>
     </div>
-</form>
 {% endblock %}
 
 {% block javascript %}

+ 20 - 60
netbox/templates/circuits/provider_edit.html

@@ -1,69 +1,29 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing {{ obj }}{% else %}Add a provider{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>Editing {{ obj }}</h1>
-{% else %}
-	<h1>Add a Provider</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Provider</strong></div>
+        <div class="panel-body">
+            {% render_field form.name %}
+            {% render_field form.slug %}
+            {% render_field form.category %}
+            {% render_field form.asn %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Provider</strong></div>
-                <div class="panel-body">
-                    {% render_field form.name %}
-                    {% render_field form.slug %}
-                    {% render_field form.category %}
-                    {% render_field form.asn %}
-                </div>
-            </div>
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Comments</strong></div>
-                <div class="panel-body">
-                    {% render_field form.comments %}
-                </div>
-            </div>
-        </div>
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Support Info</strong></div>
-                <div class="panel-body">
-                    {% render_field form.account %}
-                    {% render_field form.portal_url %}
-                    {% render_field form.noc_contact %}
-                    {% render_field form.admin_contact %}
-                </div>
-            </div>
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Support Info</strong></div>
+        <div class="panel-body">
+            {% render_field form.account %}
+            {% render_field form.portal_url %}
+            {% render_field form.noc_contact %}
+            {% render_field form.admin_contact %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-12 text-right">
-            {% if obj %}
-                <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'circuits:provider' slug=obj.slug %}" class="btn btn-default">Cancel</a>
-            {% else %}
-                <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                <a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
-            {% endif %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Comments</strong></div>
+        <div class="panel-body">
+            {% render_field form.comments %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 34 - 74
netbox/templates/dcim/device_edit.html

@@ -1,84 +1,44 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing device {{ obj }}{% else %}Add a device{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>{{ obj }}</h1>
-{% else %}
-	<h1>Add a Device</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Device</strong></div>
+        <div class="panel-body">
+            {% render_field form.name %}
+            {% render_field form.device_role %}
+        </div>
+    </div>
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Hardware</strong></div>
+        <div class="panel-body">
+            {% render_field form.manufacturer %}
+            {% render_field form.device_type %}
+            {% render_field form.serial %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Device</strong></div>
-                <div class="panel-body">
-                    {% render_field form.name %}
-                    {% render_field form.device_role %}
-                </div>
-            </div>
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Hardware</strong></div>
-                <div class="panel-body">
-                    {% render_field form.manufacturer %}
-                    {% render_field form.device_type %}
-                    {% render_field form.serial %}
-                </div>
-            </div>
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Comments</strong></div>
-                <div class="panel-body">
-                    {% render_field form.comments %}
-                </div>
-            </div>
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Location</strong></div>
+        <div class="panel-body">
+            {% render_field form.site %}
+            {% render_field form.rack %}
+            {% render_field form.face %}
+            {% render_field form.position %}
         </div>
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Location</strong></div>
-                <div class="panel-body">
-                    {% render_field form.site %}
-                    {% render_field form.rack %}
-                    {% render_field form.face %}
-                    {% render_field form.position %}
-                </div>
-            </div>
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Management</strong></div>
-                <div class="panel-body">
-                    {% render_field form.platform %}
-                    {% render_field form.status %}
-                    {% if obj %}{% render_field form.primary_ip %}{% endif %}
-                    {% render_field form.ro_snmp %}
-                </div>
-            </div>
+    </div>
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Management</strong></div>
+        <div class="panel-body">
+            {% render_field form.platform %}
+            {% render_field form.status %}
+            {% if obj %}{% render_field form.primary_ip %}{% endif %}
+            {% render_field form.ro_snmp %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-12 text-right">
-            {% if obj %}
-                <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'dcim:device' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-            {% else %}
-                <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                <a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
-            {% endif %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Comments</strong></div>
+        <div class="panel-body">
+            {% render_field form.comments %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 6 - 44
netbox/templates/dcim/devicetype_edit.html

@@ -1,49 +1,11 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing device type {{ obj }}{% else %}Add a Device Type{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>{{ obj }}</h1>
-{% else %}
-	<h1>Add a Device Type</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Device Type</strong></div>
-                <div class="panel-body">
-                    {% render_form form %}
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3 text-center">
-            {% if obj %}
-                <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'dcim:devicetype' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-            {% else %}
-                <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                <a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
-            {% endif %}
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Device Type</strong></div>
+        <div class="panel-body">
+            {% render_form form %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 14 - 54
netbox/templates/dcim/rack_edit.html

@@ -1,61 +1,21 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing rack {{ obj }}{% else %}Add a rack{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>Rack {{ obj }}</h1>
-{% else %}
-	<h1>Add a Rack</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Rack</strong></div>
-                <div class="panel-body">
-                    {% render_field form.site %}
-                    {% render_field form.group %}
-                    {% render_field form.name %}
-                    {% render_field form.facility_id %}
-                    {% render_field form.u_height %}
-                </div>
-            </div>
-        </div>
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Comments</strong></div>
-                <div class="panel-body">
-                    {% render_field form.comments %}
-                </div>
-            </div>
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Rack</strong></div>
+        <div class="panel-body">
+            {% render_field form.site %}
+            {% render_field form.group %}
+            {% render_field form.name %}
+            {% render_field form.facility_id %}
+            {% render_field form.u_height %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-12 text-right">
-            {% if obj %}
-                <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'dcim:rack' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-            {% else %}
-                <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                <a href="{% url 'dcim:rack_list' %}" class="btn btn-default">Cancel</a>
-            {% endif %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Comments</strong></div>
+        <div class="panel-body">
+            {% render_field form.comments %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 15 - 55
netbox/templates/dcim/site_edit.html

@@ -1,62 +1,22 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing site {{ obj }}{% else %}Add a site{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>Site {{ obj }}</h1>
-{% else %}
-	<h1>Add a Site</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Site</strong></div>
-                <div class="panel-body">
-                    {% render_field form.name %}
-                    {% render_field form.slug %}
-                    {% render_field form.facility %}
-                    {% render_field form.asn %}
-                    {% render_field form.physical_address %}
-                    {% render_field form.shipping_address %}
-                </div>
-            </div>
-        </div>
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Comments</strong></div>
-                <div class="panel-body">
-                    {% render_field form.comments %}
-                </div>
-            </div>
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Site</strong></div>
+        <div class="panel-body">
+            {% render_field form.name %}
+            {% render_field form.slug %}
+            {% render_field form.facility %}
+            {% render_field form.asn %}
+            {% render_field form.physical_address %}
+            {% render_field form.shipping_address %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-12 text-right">
-            {% if obj %}
-                <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'dcim:site' slug=obj.slug %}" class="btn btn-default">Cancel</a>
-            {% else %}
-                <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                <a href="{% url 'dcim:site_list' %}" class="btn btn-default">Cancel</a>
-            {% endif %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Comments</strong></div>
+        <div class="panel-body">
+            {% render_field form.comments %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 9 - 43
netbox/templates/ipam/aggregate_edit.html

@@ -1,48 +1,14 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing aggregate {{ obj }}{% else %}Add a new aggregate{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>{{ obj }}</h1>
-{% else %}
-	<h1>Add an Aggregate</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Aggregate</strong></div>
-                <div class="panel-body">
-                    {% render_field form.prefix %}
-                    {% render_field form.rir %}
-                    {% render_field form.date_added %}
-                    {% render_field form.description %}
-                </div>
-            </div>
-		    <div class="form-group">
-                <div class="col-md-9 col-md-offset-3">
-                    {% if obj %}
-                        <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                        <a href="{% url 'ipam:aggregate' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-                    {% else %}
-                        <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                        <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                        <a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
-                    {% endif %}
-                </div>
-		    </div>
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Aggregate</strong></div>
+        <div class="panel-body">
+            {% render_field form.prefix %}
+            {% render_field form.rir %}
+            {% render_field form.date_added %}
+            {% render_field form.description %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 41 - 73
netbox/templates/ipam/ipaddress_edit.html

@@ -1,86 +1,54 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing IP Address {{ obj }}{% else %}Add an IP Address{% endif %}{% endblock %}
-
-{% block content %}
-<h1>{% if obj %}Editing IP Address {{ obj }}{% else %}Add an IP Address{% endif %}</h1>
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>IP Address</strong></div>
+        <div class="panel-body">
+            {% render_field form.address %}
+            {% render_field form.vrf %}
+            {% if obj %}
+                <div class="form-group">
+                    <label class="col-md-3 control-label">Device</label>
+                    <div class="col-md-9">
+                        <p class="form-control-static">
+                            {% if obj.interface %}
+                                <a href="{% url 'dcim:device' pk=obj.interface.device.pk %}">{{ obj.interface.device }}</a>
+                            {% else %}
+                                <span>None</span>
+                            {% endif %}
+                        </p>
                     </div>
                 </div>
-            {% endif %}
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>IP Address</strong></div>
-                <div class="panel-body">
-                    {% render_field form.address %}
-                    {% render_field form.vrf %}
-                    {% if obj %}
-                        <div class="form-group">
-                            <label class="col-md-3 control-label">Device</label>
-                            <div class="col-md-9">
-                                <p class="form-control-static">
-                                    {% if obj.interface %}
-                                        <a href="{% url 'dcim:device' pk=obj.interface.device.pk %}">{{ obj.interface.device }}</a>
-                                    {% else %}
-                                        <span>None</span>
-                                    {% endif %}
-                                </p>
-                            </div>
-                        </div>
-                        <div class="form-group">
-                            <label class="col-md-3 control-label">Interface</label>
-                            <div class="col-md-9">
-                                <p class="form-control-static">{{ obj.interface }}</p>
-                            </div>
-                        </div>
-                    {% endif %}
-                    {% render_field form.description %}
-                </div>
-            </div>
-        </div>
-        <div class="col-md-6">
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>NAT IP (Inside)</strong></div>
-                <div class="panel-body">
-                    <ul class="nav nav-tabs" role="tablist">
-                        <li role="presentation" class="active"><a href="#select" aria-controls="home" role="tab" data-toggle="tab">By Device</a></li>
-                        <li role="presentation"><a href="#search" aria-controls="search" role="tab" data-toggle="tab">By IP</a></li>
-                    </ul>
-                    <div class="tab-content">
-                        <div class="tab-pane active" id="select">
-                            {% render_field form.nat_site %}
-                            {% render_field form.nat_device %}
-                        </div>
-                        <div class="tab-pane" id="search">
-                            {% render_field form.livesearch %}
-                        </div>
+                <div class="form-group">
+                    <label class="col-md-3 control-label">Interface</label>
+                    <div class="col-md-9">
+                        <p class="form-control-static">{{ obj.interface }}</p>
                     </div>
-                    {% render_field form.nat_inside %}
                 </div>
-            </div>
+            {% endif %}
+            {% render_field form.description %}
         </div>
     </div>
-    <div class="row">
-        <div class="col-md-12 text-right">
-            {% if obj %}
-                <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'ipam:ipaddress' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-            {% else %}
-                <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                <a href="{% url 'ipam:ipaddress_list' %}" class="btn btn-default">Cancel</a>
-            {% endif %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>NAT IP (Inside)</strong></div>
+        <div class="panel-body">
+            <ul class="nav nav-tabs" role="tablist">
+                <li role="presentation" class="active"><a href="#select" aria-controls="home" role="tab" data-toggle="tab">By Device</a></li>
+                <li role="presentation"><a href="#search" aria-controls="search" role="tab" data-toggle="tab">By IP</a></li>
+            </ul>
+            <div class="tab-content">
+                <div class="tab-pane active" id="select">
+                    {% render_field form.nat_site %}
+                    {% render_field form.nat_device %}
+                </div>
+                <div class="tab-pane" id="search">
+                    {% render_field form.livesearch %}
+                </div>
+            </div>
+            {% render_field form.nat_inside %}
         </div>
     </div>
-</form>
 {% endblock %}
 
 {% block javascript %}

+ 12 - 46
netbox/templates/ipam/prefix_edit.html

@@ -1,51 +1,17 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing prefix {{ obj }}{% else %}Add a prefix{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>{{ obj }}</h1>
-{% else %}
-	<h1>Add a Prefix</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>Prefix</strong></div>
-                <div class="panel-body">
-                    {% render_field form.prefix %}
-                    {% render_field form.vrf %}
-                    {% render_field form.site %}
-                    {% render_field form.vlan %}
-                    {% render_field form.status %}
-                    {% render_field form.role %}
-                    {% render_field form.description %}
-                </div>
-            </div>
-		    <div class="form-group">
-                <div class="col-md-9 col-md-offset-3">
-                    {% if obj %}
-                        <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                        <a href="{% url 'ipam:prefix' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-                    {% else %}
-                        <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                        <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                        <a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
-                    {% endif %}
-                </div>
-		    </div>
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>Prefix</strong></div>
+        <div class="panel-body">
+            {% render_field form.prefix %}
+            {% render_field form.vrf %}
+            {% render_field form.site %}
+            {% render_field form.vlan %}
+            {% render_field form.status %}
+            {% render_field form.role %}
+            {% render_field form.description %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 10 - 45
netbox/templates/ipam/vlan_edit.html

@@ -1,50 +1,15 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing VLAN {{ obj }}{% else %}Add a new VLAN{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>{{ obj }}</h1>
-{% else %}
-	<h1>Add a VLAN</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>VLAN</strong></div>
-                <div class="panel-body">
-                    {% render_field form.site %}
-                    {% render_field form.vid %}
-                    {% render_field form.name %}
-                    {% render_field form.status %}
-                    {% render_field form.role %}
-                </div>
-            </div>
-		    <div class="form-group">
-                <div class="col-md-9 col-md-offset-3">
-                    {% if obj %}
-                        <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                        <a href="{% url 'ipam:vlan' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-                    {% else %}
-                        <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                        <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                        <a href="{% url 'ipam:vlan_list' %}" class="btn btn-default">Cancel</a>
-                    {% endif %}
-                </div>
-		    </div>
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>VLAN</strong></div>
+        <div class="panel-body">
+            {% render_field form.site %}
+            {% render_field form.vid %}
+            {% render_field form.name %}
+            {% render_field form.status %}
+            {% render_field form.role %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 6 - 40
netbox/templates/ipam/vrf_edit.html

@@ -1,45 +1,11 @@
-{% extends '_base.html' %}
+{% extends 'utilities/obj_edit.html' %}
 {% load form_helpers %}
 
-{% block title %}{% if obj %}Editing VRF {{ obj }}{% else %}Add a VRF{% endif %}{% endblock %}
-
-{% block content %}
-{% if obj %}
-	<h1>{{ obj }}</h1>
-{% else %}
-	<h1>Add a VRF</h1>
-{% endif %}
-<form action="." method="post" class="form form-horizontal">
-    {% csrf_token %}
-    <div class="row">
-        <div class="col-md-6 col-md-offset-3">
-            {% if form.non_field_errors %}
-                <div class="panel panel-danger">
-                    <div class="panel-heading"><strong>Errors</strong></div>
-                    <div class="panel-body">
-                        {{ form.non_field_errors }}
-                    </div>
-                </div>
-            {% endif %}
-            <div class="panel panel-default">
-                <div class="panel-heading"><strong>VRF</strong></div>
-                <div class="panel-body">
-                    {% render_form form %}
-                </div>
-            </div>
-		    <div class="form-group">
-                <div class="col-md-9 col-md-offset-3">
-                    {% if obj %}
-                        <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                        <a href="{% url 'ipam:vrf' pk=obj.pk %}" class="btn btn-default">Cancel</a>
-                    {% else %}
-                        <button type="submit" name="_create" class="btn btn-primary">Create</button>
-                        <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
-                        <a href="{% url 'ipam:vrf_list' %}" class="btn btn-default">Cancel</a>
-                    {% endif %}
-                </div>
-		    </div>
+{% block form %}
+    <div class="panel panel-default">
+        <div class="panel-heading"><strong>VRF</strong></div>
+        <div class="panel-body">
+            {% render_form form %}
         </div>
     </div>
-</form>
 {% endblock %}

+ 38 - 0
netbox/templates/utilities/obj_edit.html

@@ -0,0 +1,38 @@
+{% extends '_base.html' %}
+{% load form_helpers %}
+
+{% block title %}
+    {% if obj %}Editing {{ obj_type }} {{ obj }}{% else %}Add a new {{ obj_type }}{% endif %}
+{% endblock %}
+
+{% block content %}
+    <form action="." method="post" class="form form-horizontal">
+        {% csrf_token %}
+        <div class="row">
+            <div class="col-md-6 col-md-offset-3">
+                <h3>{% if obj %}Editing {{ obj_type }} {{ obj }}{% else %}Add a new {{ obj_type }}{% endif %}</h3>
+                {% if form.non_field_errors %}
+                    <div class="panel panel-danger">
+                        <div class="panel-heading"><strong>Errors</strong></div>
+                        <div class="panel-body">
+                            {{ form.non_field_errors }}
+                        </div>
+                    </div>
+                {% endif %}
+                {% block form %}{% endblock %}
+            </div>
+        </div>
+        <div class="row">
+            <div class="col-md-6 col-md-offset-3 text-right">
+                {% if obj %}
+                    <button type="submit" name="_update" class="btn btn-primary">Update</button>
+                    <a href="{{ obj.get_absolute_url }}" class="btn btn-default">Cancel</a>
+                {% else %}
+                    <button type="submit" name="_create" class="btn btn-primary">Create</button>
+                    <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
+                    <a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
+                {% endif %}
+            </div>
+        </div>
+    </form>
+{% endblock %}

+ 4 - 0
netbox/utilities/views.py

@@ -91,6 +91,7 @@ class ObjectAddView(View):
 
         return render(request, self.template_name, {
             'form': form,
+            'obj_type': self.model._meta.verbose_name,
             'cancel_url': reverse(self.cancel_url),
         })
 
@@ -108,6 +109,7 @@ class ObjectAddView(View):
 
         return render(request, self.template_name, {
             'form': form,
+            'obj_type': self.model._meta.verbose_name,
             'cancel_url': reverse(self.cancel_url),
         })
 
@@ -132,6 +134,7 @@ class ObjectEditView(View):
         return render(request, self.template_name, {
             'obj': obj,
             'form': form,
+            'obj_type': self.model._meta.verbose_name,
             'cancel_url': obj.get_absolute_url(),
         })
 
@@ -151,6 +154,7 @@ class ObjectEditView(View):
         return render(request, self.template_name, {
             'obj': obj,
             'form': form,
+            'obj_type': self.model._meta.verbose_name,
             'cancel_url': obj.get_absolute_url(),
         })