Вывод значений из списка ключей с помощью SQLAlchemy, Jinja2 и Flask

1

часть html:

{% for device in casperdevices %}
        <tr>
        {% for key in casperkeys %}
            <td>
                {{ _('%(key)s', key=device[key]) }}
            </td>
            {% if key == 'Report URL' %}
            <td>
                <p><a href="{{ _('%(key)s', key=device[key]) }}">
                    {{ _('%(key)s', key=device[key]) }}</a><p>
            </td>
            {% endif %}
        {% endfor %}
        </tr>
    {% endfor %}

Модель:

class Casperinv(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    serial = db.Column(db.String(64), index=True)
    display_name = db.Column(db.String(64), index=True)
    wifimac = db.Column(db.String(32), index=True)
    ip = db.Column(db.String(16), index=True)
    osvers = db.Column(db.String(16), index=True)
    username = db.Column(db.String(64), index=True)
    email = db.Column(db.String(150), index=True)

Ключи = casperkeys = ['serial', 'ip', 'username']

casperdevices = Casperinv.query.all()

Страница форматирует столбец/ячейку, как ожидалось, на результирующей странице, которая загружается, но я не могу заставить ее фактически показывать вывод в каждой ячейке. В основном я пытаюсь получить отчет, чтобы показать на веб-странице только те столбцы, которые выбраны для зарегистрированных параметров пользователя.

Когда я пытаюсь использовать переменные в командной оболочке, он говорит, что объект SQL alchemy не подлежит индексированию. Я уверен, что я пропустил что-то простую синтаксически. Набрав casperdevices[0].ip как пример покажет вывод.. но как мне получить ключи для случайного вывода в этом формате, чтобы получить нужный мне результат?

Изменить - я должен упомянуть, что я изначально попытался использовать key=device.key выше, но не повезло.

Изменить 2 - я думаю, что я близок. Если я запустил цикл:

for x in casperdevices:
    for y in casperkeys:
        print(vars(x)[y])

Я получаю его, чтобы распечатать все, что я искал в фляжной оболочке! Однако, когда я пытаюсь поместить key=vars(device)[key] в шаблон, он просто говорит, что vars не определен.. can not do '{% set x = vars (device)%}, поскольку это вызывает такая же ошибка. :(

Спасибо!

Теги:
flask
jinja2
sqlalchemy

1 ответ

0

Я обманул.. там, вероятно, лучший способ сделать это без изменения формата.. но пока кто-нибудь не сможет понять меня, вот решение: Шаблон:

    {% for device in casperdevices.keys() %}
        <tr>
        {% for key in casperkeys %}
            {% if key == 'reporturl' %}
            <td>
                <p><a href="{{ _('%(key)s', key=casperdevices[device][key]) }}">
                    {{ _('%(key)s', key=casperdevices[device][key]) }}</a><p>
            </td>
            {% else %}
            <td>
                {{ _('%(key)s', key=casperdevices[device][key]) }}
            </td>
            {% endif %}
        {% endfor %}
        </tr>

Маршруты:

@bp.route('/reports/casperinv')
@login_required
def casperinv():
    getset = Setting.query.filter_by(user_id=current_user.id).first()
    casperquery = Casperinv.query.all()
    total = len(casperquery)
    casperkeys = json.loads(getset.casper)
    casperdevices = {}
    for x in casperquery:
        casperdevices[x.serial] = vars(x)
    return render_template('/reports/casperinv.html', title=_('Casper Inventory'),
                casperdevices=casperdevices, total=total, casperkeys=casperkeys)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню