web-dev-qa-db-ja.com

flask-データベースをpythonからhtmlに表示します

データベースからデータを取得するこのようなコードがあり、それをhtmlで表示したいと思います。

これはapp.py

@app.route('/news')
def news():
    import pymysql
    import re

    Host='localhost'
    user = 'root'
    password = ''
    db = 'skripsi'

    try:
        con = pymysql.connect(Host=host,user=user,password=password,db=db, use_unicode=True, charset='utf8')
        print('+=========================+')
        print('|  CONNECTED TO DATABASE  |')
        print('+=========================+')
     except Exception as e:
        sys.exit('error',e)

     cur = con.cursor()
     cur.execute("SELECT * FROM dataset")
     data = cur.fetchall()

     for row in data:
         id_berita = row[0]
         judul = row[1]
         isi = row[2]
         print('===============================================')
         print('BERITA KE', id_berita)
         print('Judul :', judul)
         print('Isi   :', isi)
         print('===============================================')

return render_template('home.html')

これが結果です

enter image description here

これはberita.htmlです。 div class = output内に表示したい

<body>
<center>
<header style="padding-top: 10px; font-family: Calibri; font-size: 40pt;">WELCOME!</header><br>
<div class="nav">
  <a href="/home">Home
  <a href="/berita">Berita
  <a href="/preprocessing">Pre-Processing
  <a href="/feature">Fitur Ekstraksi
  <a href="/knn">KNN
</div>
<div class="output">
</div>
8
David Herlianto

次のようにrender_template()を使用してデータを渡すことができます。

cur = con.cursor()
cur.execute("SELECT * FROM dataset")
data = cur.fetchall()
render_template('template.html', data=data)

次に、テンプレートで行を反復処理します。たとえば、各行のテーブル行をレンダリングできます。

{% for item in data %}
<tr>
    <td>{{item[0]}}</td>
    <td>{{item[1]}}</td>
    ...
</tr>
{% endfor %}
13
bgse

render_templateを使用すると、htmlに変数を渡すことができ、jinja2を使用すると、それを操作します。クエリ結果をフォーマットし、render_template内で送信するだけです

app.py

@app.route('/test')
def test_route():
    user_details = {
        'name': 'John',
        'email': '[email protected]'
    }

    return render_template('test.html', user=user_details)

test.html

<!DOCTYPE html>
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <!-- use {{}} to access the render_template vars-->
        <p>{{user.name}}</p>
        <p>{{user.email}}</p>
    </body>
</html>

jinja2を最大限に活用するには、彼の Documentation をご覧ください。

5
DobleL

Table_name = user_infoがあるとし、それを視覚化してみましょう。

id |名前|メール|電話| 1 |エルタック| [email protected] | +99421112 |


あなたはこのようなことをすることができます:

app_name.py

from flask import Flask, render_template
import mysql.connector

mydatabase = mysql.connector.connect(
    Host = 'localhost(or any other Host)', user = 'name_of_user',
    passwd = 'db_password', database = 'database_name')


mycursor = mydatabase.cursor()

#There you can add home page and others. It is completely depends on you

@app.route('/example.html')
def example():
   mycursor.execute('SELECT * FROM user_info')
   data = mycursor.fetchall()
   return render_template('example.html', output_data = data)


上記のコードではfetchall()メソッドを使用しているため、IDも自動的に含まれます

(ヘッダーhtmlタグなどは無視されます。私は本文の内部にのみ書き込みます)example.html

--snip--

<table>
    <thead>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Email</th>
        <th>Phone</th>
    </tr>
    </thead>
    <tbody>
        {% for row in output_data %} <-- Using these '{%' and '%}' we can write our python code -->
            <tr>
                <td>{{row[0]}}</td>
                <td>{{row[1]}}</td>
                <td>{{row[2]}}</td>
                <td>{{row[3]}}</td>
            </tr>
        {% endfor %}        <-- Because it is flask framework there would be other keywords like 'endfor'   -->
    </tbody>
</table>

--snip--


そして最後に、あなたは期待される結果を得ます

2