【问题标题】:Output values from list of keys with SQLAlchemy, Jinja2, and Flask使用 SQLAlchemy、Jinja2 和 Flask 从键列表中输出值
【发布时间】:2018-11-27 20:36:37
【问题描述】:

部分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 .. 也不能执行 `{% set x = vars(device) %},因为这会触发相同的错误。 :(

谢谢!

【问题讨论】:

    标签: python flask sqlalchemy jinja2


    【解决方案1】:

    我作弊了.. 可能有更好的方法来做到这一点而无需更改格式.. 但在有人能提示我之前,这里有一个解决方案: 模板:

        {% 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多