使用SQLAlchemy,Jinja2和Flask

时间:2018-06-19 00:01:04

标签: python flask sqlalchemy jinja2

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)

Keys = casperkeys = ['serial', 'ip', 'username']

casperdevices = Casperinv.query.all()

页面在加载的结果页面中按预期格式化列/单元格,但我不能让它实际显示每个单元格中的输出。基本上我正在尝试获取报告,以便在网页中仅显示为登录用户的设置选择的列。

当我尝试在flask shell中使用变量时,它表示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没有定义。不能执行`{%set x = vars(device)%},因为它会触发相同的错误。 :(

谢谢!

1 个答案:

答案 0 :(得分: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)