Nội dung
Bài này sẽ giới thiệu những nội dung sau:
- Truy vấn lấy bài viết và chuyển qua template
- Thiết kế template
- Tạo Path
Truy vấn lấy bài viết và chuyển qua template
Đầu tiên ta sẽ lấy toàn bộ bài viết mà ta đã học từ bài TƯƠNG TÁC DATABASE BẰNG NGÔN NGỮ PYTHON, sau đã sẽ chuyển qua template thông qua hàm render.
from django.shortcuts import render
from .models import Post
# Create your views here.
def list(request):
Data = {'Posts': Post.objects.all().order_by('-date')}
return render(request, 'blog/blog.html', Data)
- Bước 1: ta sẽ import model Post để có thể truy vấn dữ liệu.
- Bước 2: tạo hàm list để xử lý request yêu cầu liệt kê bài viết
- Bước 3: tạo một biến Data kiểu dict, có key là Posts với value là câu truy vấn lấy toàn bộ bài viết và nó được sắp xếp bằng date, việc thêm dấu trừ là sắp xếp từ bài mới nhất đến bài cũ nhất
- Bước 4: render sang template blog.html, đưa Data vào tham số cuối để template dùng dữ liệu để tạo giao diện
Thiết kế template
Tiếp theo, ta sẽ tạo blog.html. Ta sẽ tạo folder template trong app blog, rồi tạo 1 folder blog để chứa template trên
{% extends "pages/base.html" %}
{% block title %}Blog{% endblock %}
{% block content %}
{% for post in Posts %}
<h4>{{post.date|date:"d-m-Y"}}<a href="/redirect?Id=XFWwRhLp0mSTd9Wax7NavaaW0OFX0hlzgKM0xKlFX3onFFgtYh6qHM4KXsj1G05uFTfbrCkJYatYZfahoYcjPhzuw9rXFjXjgh1aXxIv8Hc%3d"
{% endfor %}
{% endblock %}
- Bước 1: Extend đến base.html tương tự như những bài trước
- Bước 2: ở block content ta sẽ dùng vòng lặp for trong Jinja để liệt kê list Posts. Posts chính là key Post trong Data mà ta đã truyền ở tham số render. Value của key Posts chính là toàn bộ bài viết ta đã truy vấn.
- Bước 3: trong vòng lặp, Kteam sẽ tạo thẻ <h4>, để lấy cột date từ biến chạy post, ta cần cho biến nằm trong {{ }} để template hiểu cần gọi giá trị đó ra. Ngoài ra, Kteam muốn nó định dạng theo format “ngày-tháng-năm” nên ghi thêm format phía sau
- Bước 4: tiếp theo, tạo tag a để dẫn các đường link đến chi tiết bài viết, ở href Kteam muốn đường dẫn là /blog/{id của post}, sau này để hiện thị chi tiết bài viết Kteam sẽ giải thích bài sau. Cuối cùng, thẻ <a> sẽ có nội dung là tiêu đề bài viết nên Kteam sẽ gọi từ thuộc tính title của post.
Tạo Path
Cũng như hướng dẫn trước đây, đầu tiên Kteam sẽ khai báo path blog ở urls trong PythonWeb:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('home.urls')),
path('blog/', include('blog.urls')),
]
Rồi ta tạo file urls trong app blog:
from django.urls import path
from . import views
urlpatterns = [
path('', views.list),
]
Như vậy, ta mặc định vô đường dẫn /blog/ thì sẽ liệt kê bài viết ra. Bây giờ ta thử mở server và vào mục bài viết để kiểm tra thử: