Bài ngày hôm nay mình sẽ viết về template tức là làm sao để bạn có 1 cái ứng dụng tuyệt vời với sự kết hợp của Flask.
![flask.png](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_trleEobKpBeLmoaWpkNojDBbHaMmICmVLKbJNjMST0i6ew2NJvQMxvmb7kDRolcXcMOjSlNs5IrceIANHVNl2CvLV-q3IqTnBvH15jYw=s0-d)
Templates nó là 1 extensions hộ trợ cho việc show dữ liệu từ app ra file html. Và ở đây mình sẽ sử dụng 1 extensions có tên là Jinja2. Jinja2hỗ trợ cho Flask rất tốt và nó cũng dc đính kèm với Flask nên bạn không cần phải cài đặt chúng.
- OK, bây giờ áp dụng luôn vào ví dụ hôm trước nhé. Bài trước có đoạn code như thế này:
- Để sử dụng được templates thì trước tiên bạn cần tạo 1 folder templates, thư mục này sẽ chứa các file html. Sau đó mình sẽ tạo 1 file templates/index.html chứa nội dung là "<h1>Hello world!!</h1>" và 1 file templates/user.html với nội dung: "<h1>Hello, {{ name }}!</h1>". Và file hello.py mình sẽ sửa lại 1 chút để ứng dụng nó sẽ render đến mấy file html.
- Ở đây hàm render_template được cung cấp bởi Flask và nó được tích hợp với Jinja2 template chính vì vậy mà chúng ta không cần phải cài đặt Jinja2 :v
- Rồi bạn chạy thử xem có khác biệt gì với kết quả bài 2 không, không khác gì đúng không
Vậy qua cái ví dụ trên chắc các bạn cũng đã hiểu ra nhiều về cái template rồi đấy. Tiếp đến mới là phần quan trọng đây ![Stick Out Tongue :p :p](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_uUcGbUbF1xuIiJByf8KQvhykwEyi3Yogx0aUazDYq1aaJ9dJDXHe6RJ-dUOfwNfg1FIteCEejmoq0TUYsvTFzwehg4uamLxhnckmSvf95LHXrxSpg=s0-d)
Cấu trúc điều khiển
Jinja2 cũng giống các ngôn ngữ khác, nó cũng cung cấp các câu trúc điều khiển cụ thể như sau:
- Các thẻ block sẽ xác định các yếu tố khác nhau, như block title sẽ xác định title của website, block head sẽ gọi phần head của site, ..... Và để sử dụng template cơ sở này cho các template khác thì chỉ cần gọi template này.
- Để hiểu hơn về phần này mình có 1 demo như sau: mình sẽ sử dụng Twitter Bootstrap áp dụng cho ứng dụng của mình.
![Big Grin :D :D](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_uUcGbUbF1xuIiJByf8KQvhykwEyi3Yogx0aUazDYq1aaJ9dJDXHe6RJ-dUOfwNfg1FIteCEejmoq0TUYsvTFzwehg4uamLxhnckmSvf95LHXrxSpg=s0-d)
Templates nó là 1 extensions hộ trợ cho việc show dữ liệu từ app ra file html. Và ở đây mình sẽ sử dụng 1 extensions có tên là Jinja2. Jinja2hỗ trợ cho Flask rất tốt và nó cũng dc đính kèm với Flask nên bạn không cần phải cài đặt chúng.
- OK, bây giờ áp dụng luôn vào ví dụ hôm trước nhé. Bài trước có đoạn code như thế này:
Code:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>Hello World!</h1>' @app.route('/user/<name>') def user(name): return '<h1>Hello, %s!</h1>' % name if __name__ == '__main__': app.run(debug=True)
Code:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/user/<name>') def user(name): return render_template('user.html', name=name) if __name__ == '__main__': app.run(debug=True)
- Rồi bạn chạy thử xem có khác biệt gì với kết quả bài 2 không, không khác gì đúng không
Cấu trúc điều khiển
Jinja2 cũng giống các ngôn ngữ khác, nó cũng cung cấp các câu trúc điều khiển cụ thể như sau:
- Cấu trúc câu điều kiệnCode:
{% if user %} Hello, {{ user }}! {% else %} Hello, Stranger! {% endif %}
- Cấu trúc vong lặp forCode:
<ul> {% for comment in comments %} <li>{{ comment }}</li> {% endfor %} </ul>
- Jinja cũng cung cấp các mã macros, nó cũng giống như chức năng của đoạn code pythonCode:
<li>{{ comment }}</li> {% endmacro %} <ul> {% for comment in comments %} {{ render_comment(comment) }} {% endfor %} </ul>
- Để có thể sử dụng macros nhiều lần thì chúng ta có thể lưu trữ chúng vào các tập tin riêng, và nếu muốn dùng chúng thì có thể import chúng vào các template cần dùng:Code:
{% import 'macros.html' as macros %} <ul> {% for comment in comments %} {{ macros.render_comment(comment) }} {% endfor %} </ul>
Code:
<html> <head> {% block head %} <title>{% block title %}{% endblock %} - My Application</title> {% endblock %} </head> <body> {% block body %} {% endblock %} </body> </html>
Code:
{% extends "base.html" %} {% block title %}Index{% endblock %} {% block head %} {{ super() }} <style> </style> {% endblock %} {% block body %} <h1>Hello, World!</h1> {% endblock %}
- Đầu tiên để sử dụng được bootstrap mình sẽ cài đặt nó đã:
- Trong file hello.py các bạn import thêm bootstrap vào:
- Vì file base.html đã có sẵn trong bootstrap/base.html nên ở file user.html mình chỉ cần extends vào thôi.
- Và các bạn chạy thử code xem có giống mình không nhé:
![DeepinScreenshot20150203011108.png](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_thSyJtanX8RdNG4By8LmqxtzInLu8afr9l0_wi7ZBxfsbRbf8K3sa2Z00_u48rKz2PJQFtLRZFLaMuM6UgWnmLSbfLymQizqXTcv27dWSEAn7Vsr6zoE-_ZyVCjwrtONT8rOl4xCzN=s0-d)
Vậy là hôm nay mình chia sẻ xong bài templates nhé, ngày mai mình sẽ chia sẻ bài thứ 4 đó là web form
Code:
pip install flask-bootstrap
Code:
from flask import Flask, render_template from flask.ext.bootstrap import Bootstrap app = Flask(__name__) bootstrap = Bootstrap(app) @app.route('/') def index(): return render_template('index.html') @app.route('/user/<name>') def user(name): return render_template('user.html', name=name) if __name__ == '__main__': app.run(debug=True)
Code:
{% extends "bootstrap/base.html" %} {% block title %}Kevin Kien{% endblock %} {% block navbar %} <div class="navbar navbar-inverse" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/">Ksec</a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="/">Home</a></li> </ul> </div> </div> </div> {% endblock %} {% block content %} <div class="container"> <div class="page-header"> <h1>Hello, {{ name }}!</h1> </div> </div> {% endblock %}
No comments:
Post a Comment