Changeset 6344


Ignore:
Timestamp:
Oct 6, 2008, 10:29:11 PM (16 years ago)
Author:
RIck van der Zwet
Message:

Hacked a simple model -> overview to edit/delete list to allow viewing the big
overview of some very simple models, as I like to avoid using the /admin
interface where ever possible, to teach me some extra django skills ;-)

Location:
trunk/exodus
Files:
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/exodus/templates/exodus-template.html

    r6325 r6344  
    1616          &nbsp;&nbsp;<A class="menu" href="{% url root %}">Exodus</a><br>
    1717          &nbsp;&nbsp;<A class="menu" href="{% url exodus.views.viewNodelist %}">Node List</a><br>
    18           &nbsp;&nbsp;<A class="menu" href="{% url exodus.views.genericLocation "add" "new" %}">Add Location</a><br>
     18          &nbsp;&nbsp;<A class="menu" href="{% url exodus.views.genericModel "add" "location" "new" %}">Add Location</a><br>
    1919          &nbsp;&nbsp;<A class="menu" href="{% url exodus.views.genericNode "add" "new" %}">Add Node</a><br>
     20          <center>--- Admin ---</center>
     21          &nbsp;&nbsp;<A class="menu" href="{% url exodus.views.viewList "location" %}">Location List</a><br>
     22          &nbsp;&nbsp;<A class="menu" href="{% url exodus.views.viewList "network" %}">Network List</a><br>
     23          &nbsp;&nbsp;<A class="menu" href="{% url exodus.views.viewList "dnsServer" %}">DNS List</a><br>
    2024          </div>
    2125        </td>
  • trunk/exodus/templates/viewList.html

    r6342 r6344  
    22
    33{% block content %}
    4 <a href="{% url exodus.views.viewNodelist %}">Node List</a>
    54
    6 <div style="border:1px solid #000000;">
    7 <h1> {{ node.name }} </h1>
    8 <h3> Location </h3>
    9 Description: {{ node.location.description }} <br>
    10 Longitude: {{ node.location.longitude }} <br>
    11 Latitude: {{ node.location.latitude }} <br>
     5<P class="blue">{{ modelName }} List </P>
     6{# XXX: Not DRY #}
     7<a href="/add/{{ modelURL }}/new/">New {{ modelName }}</a><p />
    128
    13 Master ip: {{ node.masterip }} <br>
    14 <a href="{% url exodus.views.genericNode "edit" node.name %}">EDIT</a>
    15 <a href="{% url exodus.views.genericNode "delete" node.name %}">DELETE</a>
    16 </div>
    17 
    18 <h2>Interfaces</h2>
    19 <a href="{% url exodus.views.genericInterface "add" node.name "new" %}">Add new interface</a><p />
    20 
    21 {% for nic in node.interface_set.all %}
    22         <div style="border:1px solid #000000;">
    23         <div style="border:1px solid #000000;">
    24         <h3>iface: {{ nic.iface }} </h3>
    25         <a href="{% url exodus.views.genericPublicAP "add" node.name nic.iface "new" %}">Add new public access point</a><p />
    26         Description: {{ nic.shortdesc }} <br>
    27         IP: {{ nic.ip }}/{{ nic.netmask }}<br />
    28         Type: {% ifequal nic nic.link %}Master{% else %}Slave {% endifequal %}<br />
    29        
    30         {% ifnotequal nic.type "eth" %}
    31                 SSID: {{ nic.ssid }} <br>
    32                 Channel: {{ nic.channel }} <br>
    33                 Antenna: {{ nic.antenna }} <br>
    34                 Polar: {{ nic.polar }} <br>     
    35                 Mode: {{ nic.mode }} <br>
    36         {% endifnotequal %}
    37         <a href="{% url exodus.views.genericInterface "edit" node.name nic.iface %}">EDIT</a>
    38         <a href="{% url exodus.views.genericInterface "delete" node.name nic.iface %}">DELETE</a>
    39         </div>
    40 
    41         {% for interlink in nic.link.interface_set.all %}
    42                 {% ifnotequal interlink nic %}
    43                 <ul>
    44                 <li>Interlink to Node: <a href="{% url exodus.views.viewNode interlink.node %}">
    45                         {{ interlink.node }}</a> </li>
    46                 <li>Link Name: {{ interlink }}</li>
    47                 <li>IP: {{ interlink.ip }}/{{ interlink.netmask }} </li>
    48                 </ul>
    49                 {% endifnotequal %}
    50         {% endfor %}
    51         <ol>
    52         {% for accessPoint in nic.ap.all %}
    53                 <div style="border:1px solid #000000;">
    54                 <p />
    55                 <li>Public Access Point: {{ accessPoint.ip}}/{{accessPoint.netmask }}
    56                 <a href="{% url exodus.views.genericPublicAP "edit" node.name nic.iface accessPoint.pk %}">EDIT</a>
    57                 <a href="{% url exodus.views.genericPublicAP "delete" node.name nic.iface accessPoint.pk %}">DELETE</a>
    58                 {% for dhcp in accessPoint.dhcpstatic.all %}
    59                         <ul>
    60                             <li>Hostname: {{ dhcp.hostname }} </li>
    61                             <li>MacAddress: {{ dhcp.macaddress }} </li>
    62                         </ul>
    63                 {% endfor %}
    64         </li>
    65                 <p />
    66                 </div>
    67         {% endfor %}
    68         </ol>
    69         </div>
    70         <p />
    71 {% endfor %}
     9{% if objects %}
     10        <table border="0" cellpadding="1">
     11        {% for object in objects %}
     12                <tr>
     13                <td>
     14                {{ object }}
     15                </td>
     16                <td>
     17                :
     18                <a href="{% url exodus.views.genericModel "edit" modelURL object %}">EDIT</a>
     19                <a href="{% url exodus.views.genericModel "delete" modelURL object %}">DELETE</a>
     20                </td>
     21                </tr>
     22    {% endfor %}
     23        </table>
     24{% else %}
     25    <p class="blue"> No {{ modelName }} are available </p>
     26{% endif %}
    7227
    7328{% endblock %}
     29
  • trunk/exodus/urls.py

    r6332 r6344  
    1717        url(r'^$', 'exodus.urls.direct_to_template', {'template': 'index.html'}, "root"),
    1818        (r'^view/nodelist/$', 'exodus.views.viewNodelist'),
     19        (r'^view/list/(?P<model>.+)/$', 'exodus.views.viewList'),
    1920        (r'^view/node/(?P<node>.+)/$', 'exodus.views.viewNode'),
    2021
     
    2324
    2425        # Generic urls
    25         (r'^location/(?P<mode>(add|edit|delete))/(?P<location>.+)/$', 'exodus.views.genericLocation'),
    26         (r'^node/(?P<mode>(add|edit|delete))/(?P<node>.+)/$', 'exodus.views.genericNode'),
    27         (r'^nic/(?P<mode>(add|edit|delete))/(?P<node>.+)/(?P<interface>.+)/$', 'exodus.views.genericInterface'),
    28         (r'^dhcp/(?P<mode>(add|edit|delete))/(?P<node>.+)/(?P<interface>.+)/(?P<publicAP>.+)/$', 'exodus.views.genericPublicAP'),
     26        (r'^(?P<mode>(add|edit|delete))/(?P<model>.+)/(?P<object>.+)/$', 'exodus.views.genericModel'),
     27        (r'^(?P<mode>(add|edit|delete))/node/(?P<node>.+)/$', 'exodus.views.genericNode'),
     28        (r'^(?P<mode>(add|edit|delete))/nic/(?P<node>.+)/(?P<interface>.+)/$', 'exodus.views.genericInterface'),
     29        (r'^(?P<mode>(add|edit|delete))/dhcp/(?P<node>.+)/(?P<interface>.+)/(?P<publicAP>.+)/$', 'exodus.views.genericPublicAP'),
    2930
    3031        # 3th party/embedded database browser
  • trunk/exodus/views.py

    r6327 r6344  
    55from django.template import Context, loader
    66from django.shortcuts import render_to_response
    7 from django.core.urlresolvers import reverse
     7from django.core.urlresolvers import reverse, NoReverseMatch
    88from django.forms.formsets import formset_factory
    99from django import forms
     
    4141                                        if self.form.is_valid():
    4242                                                # Set response on forehand, to allow override in procedure
    43                                                 self.response = HttpResponseRedirect(reverse('exodus.views.viewNode', args=[self.node.name]))
     43                                                try:
     44                                                        self.response = HttpResponseRedirect(reverse('exodus.views.viewNode', args=[self.node.name]))
     45                                                except (AttributeError, NoReverseMatch):
     46                                                        self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist'))
    4447                                               
    4548                                                #Checking whether data did change
     
    203206                _instance.masterip = freeMasterIP(_instance)
    204207                _instance.save()
     208                self.response = HttpResponseRedirect(reverse('exodus.views.viewNode', args=[_instance.name]))
    205209
    206210        def _delete(self):
     
    239243
    240244        def _add(self):
    241                 self._saveInterface()
     245                _instance = self.form.save()
    242246                # After adding a location, allow adding a Node with this location
    243247                self.response = HttpResponseRedirect(
    244                   reverse('exodus.views.genericNode', args=["add", "new"]) + "?location=%i" % self._instance.pk)
     248                  reverse('exodus.views.genericNode', args=["add", "new"]) + "?location=%i" % _instance.pk)
    245249
    246250        def _delete(self):
     
    283287          mimetype='text/plain')
    284288
     289def genericLocation(request, location, mode):
     290        handler = LocationHandler(request, location, mode)
     291        return handler.render_to_response()
     292
     293def genericModel(request, model, mode, object):
     294        """Wrapper, to get to the function needed"""
     295        model = model.capitalize()
     296        model = eval(model + 'Handler')
     297        handler = model(request, object, mode)
     298        return handler.render_to_response()
     299
     300def viewList(request, model):
     301        """Standard interface for simple overview pages, with view/edit/delete buttons on it"""
     302        modelURL = model
     303        model = model[0].upper() + model[1::]
     304        modelName = model
     305        model = eval(model)
     306        objects = model.objects.all()
     307        return render_to_response('viewList.html', {'objects': objects, 'modelURL' : modelURL, 'modelName' : modelName})
Note: See TracChangeset for help on using the changeset viewer.