Python - Templating

Chào mừng, các bạn nhà lập trình nhân dân! Hôm nay, chúng ta sẽ bước vào thế giới hấp dẫn của templating trong Python. Tôi là người giáo viên khoa học máy tính xinh đẹp, sẽ hướng dẫn bạn qua cuộc hành trình này, bước به bước. Đừng lo nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ những điều cơ bản và tiến hóa. Vậy hãy lấy một chén cà phê (hoặc trà nếu bạn thích), và hãy bắt đầu nào!

Python - Templating

Templating trong Python

Templating giống như có bản kế hoạch cho văn bản của bạn. Hãy tưởng tượng bạn đang viết thư cho nhiều người bạn khác nhau, nhưng bạn muốn cá nhân hóa từng thư. Thay vì viết toàn bộ thư từ đầu mỗi lần, bạn có thể có một mẫu với các placeholder cho tên và các chi tiết cụ thể. Đó chính là điều mà templating làm trong lập trình!

Trong Python, templating cho phép chúng ta tạo nội dung động bằng cách phân biệt cấu trúc của đầu ra của chúng ta khỏi dữ liệu điền vào. Điều này rất hữu ích cho việc tạo ra HTML, email, báo cáo hoặc bất kỳ đầu ra dựa trên văn bản nào theo mẫu nhất quán nhưng cần điền vào dữ liệu khác nhau mỗi lần.

String Templates trong Python

Hãy bắt đầu với dạng đơn giản nhất của templating trong Python: string templates. Chúng là một phần của thư viện tiêu chuẩn của Python, vì vậy chúng ta không cần cài đặt thêm gì.

Dưới đây là một ví dụ đơn giản:

from string import Template

# Tạo một mẫu
template = Template("Xin chào, $name! Chào mừng bạn đến $city.")

# Sử dụng mẫu
result = template.substitute(name="Alice", city="Wonderland")
print(result)

Nếu bạn chạy mã này, bạn sẽ thấy:

Xin chào, Alice! Chào mừng bạn đến Wonderland.

Hãy phân tích mã này:

  1. Chúng ta nhập Template lớp từ string mô-đun.
  2. Chúng ta tạo một chuỗi mẫu với các placeholder ($name$city).
  3. Chúng ta sử dụng phương pháp substitute để thay thế các placeholder này bằng các giá trị thực tế.

Rất ngon là không? Nhưng điều gì nếu chúng ta muốn mẫu phức tạp hơn? Đó là nơi Jinja2 xuất hiện!

Cài đặt Jinja2

Jinja2 là một công cụ templating mạnh mẽ cho Python. Nó không phải là một phần của thư viện tiêu chuẩn, vì vậy chúng ta cần cài đặt nó trước. Đừng lo, nó rất dễ dàng!

Mở terminal hoặc dấu nhắc lệnh của bạn và gõ:

pip install Jinja2

Và như thế giò, Jinja2 sẽ được cài đặt trên hệ thống của bạn!

Tạo và RENDER Jinja2 Templates

Bây giờ khi chúng ta đã cài đặt Jinja2, hãy tạo một mẫu đơn giản và render nó. Dưới đây là một ví dụ:

from jinja2 import Template

# Tạo một mẫu Jinja2
template = Template("Xin chào, {{ name }}! Bạn có {{ num_messages }} tin nhắn chưa đọc.")

# Render mẫu
result = template.render(name="Bob", num_messages=3)
print(result)

Kết quả sẽ là:

Xin chào, Bob! Bạn có 3 tin nhắn chưa đọc.

Hãy phân tích mã này:

  1. Chúng ta nhập Template lớp từ Jinja2.
  2. Chúng ta tạo một chuỗi mẫu với các placeholder trong dấu ngoặc móc kép {{ }}.
  3. Chúng ta sử dụng phương pháp render để điền vào các placeholder này.

Nhưng Jinja2 có thể làm nhiều hơn nữa! Hãy khám phá một số tính năng tiên tiến hơn.

Tính năng tiên tiến của Jinja2

Jinja2 không chỉ đơn giản là thay thế. Nó có thể xử lý vòng lặp, điều kiện và thậm chí là các bộ lọc! Hãy xem một ví dụ phức tạp hơn:

from jinja2 import Template

# Tạo một mẫu phức tạp hơn
template = Template("""
Xin chào, {{ name }}!
{% if tasks %}
Nhiệm vụ của bạn hôm nay là:
{% for task in tasks %}
- {{ task | capitalize }}
{% endfor %}
{% else %}
Bạn không có nhiệm vụ hôm nay. Hãy thưởng thức thời gian tự do của bạn!
{% endif %}
""")

# Render mẫu với dữ liệu khác nhau
result1 = template.render(name="Charlie", tasks=["mua sắm", "dắt chó ra đường", "giặt quần áo"])
result2 = template.render(name="David", tasks=[])

print(result1)
print("\n" + "=" * 30 + "\n")
print(result2)

Kết quả sẽ là:

Xin chào, Charlie!
Nhiệm vụ của bạn hôm nay là:
- Mua sắm
- Dắt chó ra đường
- Giặt quần áo

==============================

Xin chào, David!
Bạn không có nhiệm vụ hôm nay. Hãy thưởng thức thời gian tự do của bạn!

Wow, đó là nhiều quá! Hãy phân tích nó:

  1. Chúng ta sử dụng {% if %}{% else %} để render điều kiện.
  2. Chúng ta sử dụng {% for %} để lặp qua các nhiệm vụ.
  3. Chúng ta sử dụng bộ lọc capitalize (dấu | ký tự) để viết hoa chữ cái đầu tiên của mỗi nhiệm vụ.

Jinja2 có nhiều tính năng hơn nữa, bao gồm kế thừa mẫu, các macro và các bộ lọc tùy chỉnh. Khi bạn đã quen thuộc với những điều cơ bản này, tôi khuyến khích bạn khám phá những tính năng tiên tiến này.

Dưới đây là bảng tóm tắt một số cú pháp Jinja2 mà chúng ta đã học:

Cú pháp Mô tả Ví dụ
{{ }} Đầu ra biến {{ name }}
{% %} Câu lệnh (if, for, v.v.) {% if tasks %}
{# #} Bình luận (không hiển thị trong đầu ra) {# Đây là một bình luận #}
| Bộ lọc {{ task | capitalize }}

Và thế là đã! Bạn đã bước chân vào thế giới của Python templating. Hãy nhớ, như học bất kỳ kỹ năng mới nào, luyện tập sẽ làm bạn hoàn hảo. Hãy thử tạo mẫu của riêng bạn, thử nghiệm các tính năng khác nhau và nhất quán là hãy thưởng thức quá trình đó!

Khi kết thúc, tôi nhớ lại một câu chuyện từ những ngày dạy học sớm của mình. Tôi có một học sinh mà khó khăn với templating ban đầu, nhưng sau khi luyện tập và tạo mẫu cho blog cá nhân của mình, cô ấy yêu templating nhiều đến khi xây dựng một sự nghiệp phát triển web thành công. Ai biết? Đây có thể là bắt đầu của hành trình hấp dẫn của bạn!

Hãy tiếp tục lập trình, giữ lại sự tò mò và cho đến lần sau, hãy templating vui vẻ!

Credits: Image by storyset