قالب ها در فلسک
با سلام دوستداران zerotohero.ir و علاقه مندان به پایتون ! در این مقاله قصد داریم درباره قالب ها(templates) در فلسک صحبت کنیم. این امکان در فلسک وجود دارد که خروجی بازگشتی از یک تابع ، به آدرس URL فرم html مرتبط باشد. برای مثال ، در اسکریپت زیر تابع index() متن “hello zerotohero” را به همراه تگ های آن رندر میکند.
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "<html><body><h1>Hello ZeroToHero</h1></body></html>"
با این حال ، تولید کد HTML از پایتون کار سنگینی است به خصوص وقتی مقدار داده ها و عناصر زبان پایتون مثل شرط ها یا حلقه ها باید در آن قرار گیرند. اینجا جاییست که میتوان در مورد موتور تمپلیت jinja2 که فلسک بر اساس آن نوشته شده بحث کرد. به جای اینکه کد پیچیده html از یک تابع بازگشت داده شود، یک فایل html میتواند توسط تابع render_template() رندر شده و برای کاربر به نمایش در آید.
نمونه کد :
from flask import Flask , render_template app = Flask(__name__) @app.route('/') def index(): return render_template("login.html") if __name__ == '__main__': app.run(debug = True)
فلسک سعی میکند که فایل html در پوشه template را پیدا کند که در همین فولدر فایل های html وجود دارد. عکس زیر نحوه قرار گیری فایل ها در یک پروژه فلسک را مشاهده میکنید.
واژه “web template system” به طراحی یک اسکریپت html که متغیر ها میتوانند به صورت داینامیک insert شوند اشاره میکند. یک سیستم قالب وب متشکل از یک template engine و template processor است. فلسک از template engine به نام jinja2 استفاده میکند. یک قالب وب شامل فایل HTML است که دارای مکان نگهدار (place holder) برای متغیر ها و عناصر پایتون است که بعد از رندر شدن قالب جایگزین میشوند. قالب پایین با نام login.html در پوشه template ذخیره شده است.
<html> <body> <h1>Hello {{ name }}</h1> </body> </html>
کد زیر را در فایل Flask.py ذخیره کنید.
from flask import Flask, render_template app = Flask(__name__) @app.route('/login/<user>') def hello_name(user): return render_template('login.html', name = user) if __name__ == '__main__': app.run(debug = True)
برنامه را اجرا کنید و در مرورگر آدرس http://127.0.0.1:5000/login/zerotohero را وارد کنید.
بخش متغیر از آدرس URL در {{name}} گذاشته میشود. موتور jinja2 از delimiter های زیر برای قرارگیری عناصر پایتون در کد html استفاده میکند:
- {% %}
- {{ }}
- {# #}
- ## #
در مثال پایین، یک جمله شرطی در template نشان داده شده است. URL مربوط به تابع hello_name() مقدار integer را به عنوان پارامتر قبول میکند. این پارامتر به قالب login.html ارسال میشود. درون آن, مقدار عددی دریافت شده در شرط مقایسه میشود و بر طبق آن فایل نهایی رندر شده و ارسال میگردد.
کد پایتون زیر را در فایل Flask.py ذخیره کنید :
from flask import Flask, render_template app = Flask(__name__) @app.route('/hello/<int:score>') def hello_name(score): return render_template('login.html', marks = score) if __name__ == '__main__': app.run(debug = True)
کد html زیر را در فایل login.html در پوشه templates ذخیره کنید:
<!doctype html> <html> <body> {% if marks>50 %} <h1> Your result is pass!</h1> {% else %} <h1>Your result is fail</h1> {% endif %} </body> </html>
نکته اینکه هر خط جمله شرطی if-else در {% %} محصور هستند. کد پایتون را اجرا کنید و به آدرس – بروید تا خروجی را مشاهده کنید.
مطالب زیر را حتما مطالعه کنید
آشنایی با توابع در پایتون
راه اندازی Django به همراه Postgresql، Nginx و Gunicorn
آشنایی با حلقه ها در پایتون
5 ترفند css3 با عناصر کاذب before:: و after::
آشنایی با Protobuf
7 ویژگی Sass به همراه کد
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
من واقعا ممنونم.
فقط یک اشتباه لپی که دیدم این بود بعضی جا ها بجای “templates” نوشتید “template” یعنی ‘s’ جا انداختید.
ممنون از همراهی شما
مورد مذکور اصلاح شد.