Liệt kê danh sách bài viết trong Python Django

Lập trình web với Python bằng Django

0.0 (0 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 17:13 23-11-2019 12.739 lượt xem 9 bình luận
Học nhanh

Danh sách bài học

Liệt kê danh sách bài viết trong Python Django

Ghi chú

Nội dung bài viết bạn đang xem được update từ tháng 06/2019. Vì vậy sẽ có đôi chút khác biệt giữ VIDEO và NỘI DUNG BÀI VIẾT.

Chúng ta sẽ có nhiều cập nhập hơn về cả bài viết lẫn video trong thời gian tới. Nhớ like/ share hoặc đánh giá 5 sao để Kteam có động lực nhé! 

Cảm ơn các bạn! 


Dẫn nhập

Ở bài trước, chúng ta đã hoàn thiện bài HỆ THỐNG ADMIN TRONG PYTHON DJANGO. Trong bài này Kteam sẽ nói cho các bạn về cách Liệt kê danh sách bài viết tồn tại trong model rồi đưa lên template hiển thị cho người dùng.


Nội dung

Để theo dõi bài này tốt nhất, bạn nên xem qua bài:

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ử:


Kết

Như vậy Kteam đã hướng dẫn các bạn xong cách liệt kê danh sách bài viết trong Python Django.

Ở bài tiếp theo, Kteam sẽ giới thiệu cho các bạn HIỂN THỊ THÔNG TIN BÀI VIẾT trong Python Django.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

Khóa học

Lập trình web với Python bằng Django

Lập trình web với Python bằng Django

Đánh giá

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
largotuan đã bình luận 18:19 07-04-2020

Theo như bài học số 6: Thiết kế hoàn chỉnh blog thì http://127.0.0.1:8000/blog/ sẽ vào phần "Bài viết" trong app home/templates/blog.html? Ở bài này ta có thêm 1 blog.html nữa. Vậy cho mình hỏi tại sao mặc định lại là blog/templates/blog.html?

Mình code theo video nhưng để vào blog/templates/blog.html thì mình phải xóa đường dẫn truy cập vào home/templates/blog.html trong home/urls.py; Bởi nếu ko xóa mặc định sẽ truy cập vào home/templates/blog.html chứ ko phải blog/templates/blog.html? XIn hỏi mình đã sai ở đâu? Hay bài viết cũng đã xóa path của blog/ trong file urls.py của home?

largotuan đã bình luận 18:18 07-04-2020

Theo như bài học số 6: Thiết kế hoàn chỉnh blog thì http://127.0.0.1:8000/blog/ sẽ vào phần "Bài viết" trong app home/templates/blog.html? Ở bài này ta có thêm 1 blog.html nữa. Vậy cho mình hỏi tại sao mặc định lại là blog/templates/blog.html?

Mình code theo video nhưng để vào blog/templates/blog.html thì mình phải xóa đường dẫn truy cập vào home/templates/blog.html trong home/urls.py; Bởi nếu ko xóa mặc định sẽ truy cập vào home/templates/blog.html chứ ko phải blog/templates/blog.html? XIn hỏi mình đã sai ở đâu? Hay bài viết cũng đã xóa path của blog/ trong file urls.py của home?

k3it4s4n đã bình luận 09:49 27-08-2018

Data = {'Posts': Post.objects.all().order_by("-date")}

em bị lỗi "Post has no objects"

em đã làm như video trước,

em đã kiểm tra Post thì vẫn có objects nhưng tới đây gọi ra lại ko được

khanhlobuoc1 đã bình luận 23:23 08-05-2018

Em hiện đang bị lỗi này không biết ai gặp chưa ạ, support em với ạ !

_______________________________________________________

 path(('', views.list)),
TypeError: _path() missing 1 required positional argument: 'view'

lientuong306 đã bình luận 22:45 01-03-2018
mình bị lỗi này ad có thể giúp k ạ

AttributeError at /blog/

'QuerySet' object has no attribute 'oder_by'
from django.shortcuts import render
  1. from .models import Post
  2. # Create your views here.
  3. def list(request):
  1.    Data = {'Posts': Post.objects.all(). oder_by("-date")} 
    ...
  1.    return render(request, 'blog/blog.html', Data)
Không có video.