Python: Как я могу реализовать это в сухом виде с использованием Jinja2? - PullRequest
0 голосов
/ 29 января 2011

В моем шаблоне много такого кода:

  <h2>Owners of old cars</h2>
    <table id="hor-minimalist-b" summary="Old Cars">
    <thead>
        <tr>
            <th scope="col">Name</th>
            <th scope="col">Age</th>
            <th scope="col">Address</th>
        </tr>
    </thead>
    <tbody>
    {% for result in old_cars %}
        <tr>
            <td>{{result.name}}</td>
            <td>{{result.age}}</td>
            <td>{{result.address}}</td>
        </tr>
    {% endfor %}
    </tbody>
    </table>      

    <h2>Owners of Ford cars</h2>
    <table id="hor-minimalist-b" summary="Old Cars">
    <thead>
        <tr>
            <th scope="col">Name</th>
            <th scope="col">Age</th>
            <th scope="col">Address</th>
        </tr>
    </thead>
    <tbody>
    {% for result in ford_cars %}
        <tr>
            <td>{{result.name}}</td>
            <td>{{result.age}}</td>
            <td>{{result.address}}</td>
        </tr>
    {% endfor %}
    </tbody>
    </table>

Будет создано намного больше таблиц, подобных приведенным выше.Как вы можете видеть, есть много повторяющегося кода.Есть ли способ сделать это, чтобы я не повторял столько кода каждый раз при создании таблицы?Спасибо.

ОБНОВЛЕНИЕ

Я думаю о создании нового объекта с именем table и добавлении к нему результата и соответствующего заголовка h2.Затем я могу создать список этих табличных объектов, называемых таблицами, которые я могу передать шаблону.Шаблон может затем перебирать их.

Ответы [ 2 ]

3 голосов
/ 29 января 2011

Конечно, в идеале вы хотите:

{% for car in cars %}
<h2>Owners of {{ car.manufacturer }}</h2>
<table id="hor-minimalist-b" summary="Old Cars">
<thead>
    <tr>
        <th scope="col">Name</th>
        <th scope="col">Age</th>
        <th scope="col">Address</th>
    </tr>
</thead>
<tbody>
    {% for model in car.models %}
    <tr>
        <td>{{model.name}}</td>
        <td>{{model.age}}</td>
        <td>{{model.address}}</td>
    </tr>
    {% endfor %}
</tbody>
</table>
{% endfor %}

Я не уверен, какой ORM вы используете, но в Django это не будет слишком сложно построить;В конце концов, все, что вы передаете, это список объектов с подобъектами и полями.

Опять же, я могу говорить только о перспективе django (конструировать из вашего собственного ORM), но вы можете сознательно построить словарь с помощьюявные запросы для каждого типа производителя, или, скорее, имеют модель для «продаж» и модель для «производителя» и строят отношения «многие ко многим» между ними.Ваш запрос выглядит примерно так в django python:

result = []
manufacturers = Manufacturer.objects.all() # get all manuf
for m in manufacturer:
    mf = dict()
    mf["manufacturer"] = m.name
    mf["models"] = m.model_set.all() # get all linked models
    result.append(mf)
# pass result to template as cars

Имеет ли это смысл?

0 голосов
/ 29 января 2011

Использовать шаблон для верхнего и нижнего колонтитула таблицы

<table id="hor-minimalist-b" summary="Old Cars">
<thead>
    <tr>
        <th scope="col">Name</th>
        <th scope="col">Age</th>
        <th scope="col">Address</th>
    </tr>
</thead>
<tbody>

Поместите это в файл с именем "table_header.html" и включите его в свой шаблон. То же самое для нижнего колонтитула!

...