Cách tôi tìm hiểu về Context Processors trong Django
Tôi đang xây dựng một cửa hàng phụ kiện trực tuyến bằng Django.
Tôi đã xây dựng một thanh điều hướng (navbar) để hiển thị các danh mục sản phẩm. Ban đầu, tôi viết cứng (hard-code) các danh mục này. Cách này cũng hoạt động được một thời gian.
Sau đó, tôi nhận thấy một vấn đề. Nếu tôi thêm một danh mục mới, tôi phải cập nhật thanh điều hướng một cách thủ công. Điều này thật kém hiệu quả.
Ý nghĩ đầu tiên của tôi là truyền các danh mục thông qua context trong view của mình. Nhưng tôi sớm nhận ra vấn đề thứ hai. Mọi trang đều cần thanh điều hướng. Điều này có nghĩa là tôi sẽ phải lặp lại cùng một đoạn mã trong mọi view. Việc này khiến mã nguồn trở nên lộn xộn.
Tôi đã tìm thấy một cách tốt hơn: Django Context Processors.
Context processors giúp dữ liệu có sẵn cho tất cả các template. Bạn không cần phải truyền dữ liệu từ mọi view.
Sử dụng context processors cho:
- Các danh mục điều hướng
- Cài đặt trang web
- Thông báo người dùng
- Dữ liệu giỏ hàng
Một context processor là một hàm Python. Nó nhận một đối tượng request và trả về một dictionary.
Ví dụ:
def custom_context(request):
return {
"custom_value": "hello from context processors"
}
Bạn phải đăng ký hàm này trong phần settings. Hãy thêm nó vào danh sách context_processors bên trong cài đặt TEMPLATES.
Ví dụ:
'OPTIONS': {
'context_processors': [
'myapp.context_processors.custom_context',
],
},
Bây giờ, bạn sử dụng dữ liệu trong template của mình như sau:
{{ custom_value }}
Điều này đã giải quyết được vấn đề của tôi. Thanh điều hướng của tôi giờ đây tự động nhận được dữ liệu danh mục trên mọi trang. Tôi không còn phải viết lặp lại mã nguồn nữa.
Việc xây dựng các tính năng thường dạy cho bạn những khái niệm mới. Với tôi, đó chính là context processors.
Nguồn: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h