【问题标题】:Flask / Python3.7 jinja2.exceptions.UndefinedError: 'list object' has no attribute 'page'Flask / Python3.7 jinja2.exceptions.UndefinedError: 'list object' has no attribute 'page'
【发布时间】:2019-03-19 16:03:07
【问题描述】:

我有一个简单的 Flask 端点,它从 sqlite3 获取数据,并将结果拆分为页面。

即使有空数据,它也应该显示空表。

我在一个新的 VPS 上安装了 python3.7,安装了需求,但现在我得到了这个错误,这是我从来没有遇到过的,当我在本地运行相同的代码时也不会发生。

File "/bot/templates/show_items.html", line 17, in top-level template code
    </a>,<a href="{{ url_for('show_items', page=items.page) }}">Refresh</a>,<a href="./export/">Export All</a>,<a href="./deleteAll/">Del. All (watch out)</a>)
  File "/usr/local/lib/python3.7/site-packages/flask/helpers.py", line 345, in url_for
    force_external=external)
  File "/usr/local/lib/python3.7/site-packages/werkzeug/routing.py", line 1774, in build
    rv = self._partial_build(endpoint, values, method, append_unknown)
  File "/usr/local/lib/python3.7/site-packages/werkzeug/routing.py", line 1689, in _partial_build
    append_unknown)
  File "/usr/local/lib/python3.7/site-packages/werkzeug/routing.py", line 1697, in _partial_build
    rv = rule.build(values, append_unknown)
  File "/usr/local/lib/python3.7/site-packages/werkzeug/routing.py", line 809, in build
    add(self._converters[data].to_url(values[data]))
  File "/usr/local/lib/python3.7/site-packages/werkzeug/routing.py", line 1034, in to_url
    value = self.num_convert(value)
jinja2.exceptions.UndefinedError: 'list object' has no attribute 'page'

失败的模板:

<h3>(<a href = "{{ url_for('new') }}">Add Items
     </a>,<a href="{{ url_for('show_items', page=items.page) }}">Refresh</a>,<a href="./export/">Export All</a>,<a href="./delet$

   </h3>

终点:

@app.route("/", defaults={'page': 1}, methods=["GET", "POST"])
@app.route("/<int:page>/", methods=["GET", "POST"])
def show_items(page):

  try:

    itemss = items.query.order_by("lastUpdate desc, idI desc").paginate(page, 10)
  except:
    itemss = []
  return render_template('show_items.html', items = itemss )

我不经意间检查了其他堆栈问题,遗憾的是似乎没有任何相关,我尝试过,但是当数据库充满时它没有显示任何数据:jinja2.exceptions.UndefinedError: 'str object' has no attribute 'username'

【问题讨论】:

    标签: ubuntu flask jinja2 python-3.7


    【解决方案1】:

    代码必须进入 except 块,因此 items 是一个空列表,而不是分页对象。在模板中放置一个 if 块来处理没有项目的情况,您将摆脱错误。

    <h3>(<a href = "{{ url_for('new') }}">Add Items</a>,
    
        {% if not items %}
        <a href="{{ request.url }}">Refresh</a>,
        {% else %}
        <a href="{{ url_for('show_items', page=items.page) }}">Refresh</a>,
        {% endif %}
    
         <a href="./export/">Export All</a>,<a href="./delet$}
    
    
     </h3>
    

    【讨论】:

    • 抱歉耽搁了,我试着这样做:{% if not items %} 刷新 {% else %} 刷新 {% endif %}
    • 但遗憾的是,该表没有显示任何项目,当我们说导出到 csv 时,实际上正确地输出了 csv 文件中的 sqlite3 数据库。
    • 我看到一个可能的语法错误 - 你的烧瓶代码中的“itemss”有 2 s,但是当你在模板中引用它时它有 1 s。这是故意的吗?
    • 在 endpoit 中看到这一行:return render_template('show_items.html', items = itemss )
    • 这是为了防止具有相同的值名称,很抱歉造成混淆。我的整个代码在我自己的具有相同 python 3.7.0 的 ubuntu 机器上工作,但我认为我有一个较旧的烧瓶
    猜你喜欢
    • 2020-06-17
    • 2020-08-11
    • 2021-02-12
    • 1970-01-01
    • 2014-05-18
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多