Flask / Python3.7 jinja2.exceptions.UndefinedError: «объект списка» не имеет атрибута «страница» - PullRequest
0 голосов
/ 19 марта 2019

У меня есть простая конечная точка Flask, которая извлекает данные из sqlite3 и разделяет результаты на страницы.

Даже с пустыми данными показывалось пустое поле, как и должно быть

Я установил python3.7 на новый VPS, установил требования, но теперь я получаю эту ошибку, которой у меня никогда не было и не происходит, когда я запускаю тот же код локально.

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' не имеет атрибута 'username'

1 Ответ

0 голосов
/ 19 марта 2019

Код должен входить в блок исключения, и поэтому элементы - это пустой список, а не объект разбиения на страницы. Поместите блок 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>
...