قبل شروع باید بابت ایجاد تأخیر تولید این قسمت نسبت به قمست۳ پوزش بخوام، درگیری و مشلغه کاری خیلی اجازه تولید این قسمت را نمی داد.

همچنین بقیه آموزها را می تونید از از اینجا مشاهده کنید.

یکی از امکانات Flask اتصال خروجی یک تابع به یک آدرس در قالب HTML می باشد. برای نمونه، در کد پیش رو، تابع hello() مقدار Hello World را به همراه تگ های Html قابل نمایش می کند.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return '<html><body><h1>Hello World</h1></body></html>'

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

هر چند، تولید محتوای HTML با پایتون، به ویژه زمانی که نیازمند مقادیر متغییرها، و المان های موجود در زبان پایتون، از قبیل چرخه ها، یا شروط، مایه زحمت است.

اینجا، جایی است که می توان از قابلیت های موتور قالب Jinja2 بهره برد. به جای استفاده از کدهای HTML، می توان با استفاده از تابع render_template() و یک فایل HTML جداگانه این موضوع را انجام داد.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return render_template(hello.html)

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

در این حالت،Flask سعی دارد تا فایل HTML را در مسیر فایل قالب، در مسیری که اسکریپت جاری اجرا شده است را پیدا و اجرا نماید.

Application folder
----Hello.py
----templates
    ----hello.html

اصطلاح سیستم قالب وب اشاره دارد به طراحی و تولید یک اسکریپت HTML که در آن مقادیر متغییرها می توانند به صورت پویا جانمایی شوند. یک سیستم قالب وب، شامل یک موتور تولید قالب، برخی منابع داده و یک پردازشگر قالب می باشد.

برنامه Flask از Jinja2 به عنوان یک موتور قالب استفاده می کند. یک قالب وب شامل مکان هایی نگهداری برای متغییرها و عبارات در لابلای تگ های HTML، جایی که مقادیر آنها زمانی که صفحه قالب نمایش داده می شود، جایگزاری می شوند.

برای نمونه:

<!doctype html>
<html>
    <body>

        <h1>Hello {{ name }}!</h1>

    </body>
</html>

سپس، اسکریپت زیر را در پایتون اجرا کنید:

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/hello/<user>')
def hello_name(user):
    return render_template('hello.html', name = user)

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

زمانی که سرور شروع به اجرا کرد، مرورگر را اجرا و آدرس http://localhost:5000/hello/mvl را پیمایش کنید.

قسمت متغییر {{ name }} در آدرس در کد جایگزایری خواهد شد.

web_template

موتور قالب Jinja2 از جداکننده های زیر برای تمایز از HTML استفاده می کند:

  • {% ... %} برای دستورات
  • {{ ... }} برای عبارات تا در قالب چاپ شوند
  • {# ... #} برای کامنت ها و در خروجی تأثیر ندارند
  • # ... ## برای دستورات یک خطی

در مثال پیش رو، انحوه استفاده از عبارات شرطی در قالب نمایش داده شده است. آدرسی که به تابع hello() اشاره دارد مقادیر عددی قبول می کند. در فایل hello.html مقدار عددی متغیر mark دریافت شده، مقایسه شده (بیشتر یا کمتر از ۵۰) و HTML متناسب نمایش داده می شود.

اسکریپت مربوطه به پایتون به صورت زیر است:

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/hello/<int:score>')
def hello_name(score):
    return render_template('hello.html', marks = score)

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

کد مربوط به HTML به صورت زیر است:

<!doctype html>
<html>
    <body>
        {% if marks>50 %}
            <h1> Your result is pass!</h1>
        {% else %}
            <h1>Your result is fail</h1>
        {% endif %}
</body>
</html>

همچنین می توان از چرخه های پایتون در قالب استفاده نمود. در اسکریپت پیش رو، تابع result() زمانی که آدرس http://localhost:5000/result فراخوانی شود، یک شئ dictionary به قالب result.html ارسال کرده

در فایل result.html یک حلقه for جهت نمایش مقادیر در قالب HTML به صورت کلید مقدار استفاده شده است.

کد پایتون:

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/result')
def result():
    dict = {'phy':50,'che':60,'maths':70}
    return render_template('result.html', result = dict)

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

و کد HTML

<!doctype html>
<html>
    <body>
        <table border = 1>
            {% for key, value in result.items() %}
            <tr>
                <th> {{ key }} </th>
                <td> {{ value }} </td>
            </tr>
            {% endfor %}
        </table>
    </body>
</html>

سپس برنامه را اجرا و آدرس http://localhost:5000/result را در مرورگر برای مشاهده نتیجه باز کنید.

for_loop_jinja

پس در نتیجه، تا حدی با نحوه استفاده از موتور قالب Jinja2 آشنا شدیم. البته این موتور قالب ویژگی های خیلی بیشترو کاربردی دارد.

برچسب ها: python flask programming tutorial