#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 не работает?