Django 2.1模型和视图重复代码

时间:2018-12-01 02:35:43

标签: python-3.x django-models django-views

我正在基于以下模型和模板构建详细视图。

在运行的同时,我需要扩展到更多的模型,并且希望找到一种在两个模型和模板中都不会重复相同代码的方法。

models.py

class Entity(models.Model):
    ip_address = models.GenericIPAddressField(unique = True)
    hostname = models.CharField(max_length=64, null = True)
    geo = models.CharField(max_length=32, null = True)
    region = models.CharField(max_length=32, null = True )
    city = models.CharField(max_length=32, null = True)
    asn = models.CharField(max_length=8, null = True )
    date_seen = models.DateTimeField('date seen')

    def latest_afp(self):
        return self.afp_set.all().order_by('-date_seen')[:1].values()

    def latest_rdp(self):
        return self.rdp_set.all().order_by('-date_seen')[:1].values()

    def latest_http(self):
        return self.http_set.all().order_by('-date_seen')[:1].values()

detail.html

{% for r in entity.entityreporttypes_set.all %}
    <h5 data-toggle="collapse" data-target="#{{r.short_name}}">{{r.name}} - {{r.short_name}} -></h5>
    <div id="{{r.short_name}}" class="collapse">
    <table class="table table-sm table-striped table-bordered table-light">
        <tbody>

        {% if r.short_name == 'Rdp' %}
            {% with el=entity.latest_rdp %}
                {% include 'rvt/report.html' %}
            {% endwith %}
        {% endif %}

        {% if r.short_name == 'Afp' %}
            {% with el=entity.latest_afp %}
                {% include 'rvt/report.html' %}
            {% endwith %}
        {% endif %}

        {% if r.short_name == 'Http' %}
            {% with el=entity.latest_http %}
                {% include 'rvt/report.html' %}
            {% endwith %}
        {% endif %}

        </tbody>
    </table>
    </div>
{% endfor %}

report.html

    {% for fields in el %}
        {% for field, value in fields.items %}
            <tr><th scope="row">{{field|upper}}</td><td>{{value}}</td></tr>
        {% endfor %}
    {% endfor %}

谢谢

0 个答案:

没有答案