Что я делаю не так при передаче переменной из flask в html

#python #mysql #database #flask #mysql-connector-python

#python #mysql #База данных #flask #mysql-connector-python

Вопрос:

Я пытаюсь создать блог для практики в flask. Я подключаюсь к базе данных mysql через mysql.connector. И имя таблицы — ‘posts’ . В таблице есть столбцы id, title, content и author. Все работает нормально, кроме синтаксиса jinja {{ post.title }} не отображается заголовок сообщения (данные столбца title) Может кто-нибудь помочь, я делаю что-то не так в синтаксисе jinja или при передаче переменной из flask в html..

вот мой код flask:

 
@app.route('/posts', methods=['GET','POST'])
def posts():
    db = mysql.connector.connect(host='127.0.0.1', user='shehan', password='shehan', database='blog')
    mycursor = db.cursor()
    mycursor.execute("SELECT * FROM posts")
    all_posts = mycursor.fetchall()
    
    return render_template('posts.html', ts=all_posts)
        

if __name__ == "__main__":
    app.run(debug=True)```

------------

{% for t in ts %}
    <h2>Title: {{ t.title }}</h2>
    <h3>Post: {{ t.content }}</h3>
    <p>By: {{ t.author }}</p>
{% endfor %} 
  

Браузер не показывает никаких ошибок. Он работает нормально, за исключением {{post.title}} данные не показывают заголовок сообщения из таблицы базы данных.
Я не понимаю, почему. Что я делаю не так?

Комментарии:

1. При отладке (или написании) чего-либо, содержащего несколько движущихся частей, полезно изолировать части . У вас есть база данных, два маршрута, шаблон с циклом и несколькими переменными и т.д. Сведите это к одному маршруту с простым шаблоном (без цикла, один var) и жестко закодированными данными для визуализации. Если это сработает, то медленно добавляйте материал обратно, пока этого не произойдет. Если / когда это не сработает, задайте вопрос об этом упрощенном примере.

2. Я попытался упростить код. Я удалил другие части кода, но по-прежнему {{ t.titile}} не показывает данные..

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

Ответ №1:

Может ли быть так, что имя функции совпадает с именем возвращаемой переменной?

Комментарии:

1. Я изменил имя переменной на ‘ts’. но все равно это не работает. может ли это быть проблемой с браузером или чем-то подобным?

2. Нет, это не браузер. Можете ли вы напечатать ‘all_posts’ и отправить вывод?

3. да, я могу. если я делаю {{ t }}, то вывод браузера будет » (10, ‘сообщение в блоге 1’, ‘это первое сообщение’, ‘shehan’) » . он показывает всю строку таблицы. но если я делаю {{ t.title }}, это не отображается..

4. Поскольку это не объект, внутри которого находится кортеж, попробуйте t[0], t[1] …

5. м. да, это работает.. но почему я не могу использовать {{ t.title }} Я имею в виду, что я видел t.title в учебниках. Вы знаете причину? может быть, потому, что я недавно установил python и в более новых версиях python t.title не работает?