2009-02-23 18 views
11

Tôi đang làm việc trên một ứng dụng blog và tôi muốn có một thanh bên bao gồm danh sách tất cả các tháng mà blog đã tồn tại, để cung cấp liên kết đến các trang lưu trữ. Hơn nữa, tôi muốn làm cho điều này tự động cập nhật khi tháng thay đổi, thay vì mã hóa nó trong mẫu. Tất nhiên, theo như tôi có thể nói, điều này có nghĩa là tôi sẽ phải tính danh sách các tháng trong mỗi chế độ xem và chuyển nó vào mọi mẫu từ mọi chế độ xem.Làm thế nào tôi có thể vượt qua một biến tĩnh tiêu chuẩn từ tất cả các khung nhìn trong Django?

Tôi muốn tránh điều này, nếu có thể. Có cách nào để tính toán danh sách một lần và tự động áp dụng nó cho mỗi mẫu, mà không cần phải chuyển nó một cách rõ ràng vào khuôn mẫu từ mỗi khung nhìn?

Trả lời

17

Có một vài giải pháp khả thi cho vấn đề của bạn.

Nếu bạn thực sự muốn có điều này trên mỗi trang trên trang web của bạn là context processor có lẽ là lựa chọn tốt nhất của bạn. Bộ xử lý ngữ cảnh là cách cơ bản để chèn dữ liệu vào tất cả các bối cảnh mẫu. Tuy nhiên, hãy lưu ý rằng bộ xử lý ngữ cảnh sẽ được gọi theo số mọi yêu cầu.

Một giải pháp thay thế sẽ là tạo custom template tag và sử dụng nó trên mẫu cơ sở được chia sẻ cho tất cả các trang bạn muốn có thanh bên. Thẻ mẫu phức tạp hơn một chút để tạo nhưng chúng linh hoạt hơn.

Với một trong hai giải pháp, bạn cũng nên xem sốcủa Django. Khung bộ nhớ cache giúp bạn lưu trữ tạm thời các giá trị được tính trong một thời gian để lưu một số công việc trên mỗi yêu cầu.

+1

+1 để đề cập đến thẻ mẫu tùy chỉnh. Trừ khi đây là một giá trị bạn sẽ sử dụng trên nghĩa đen mỗi trang duy nhất trên trang web, đó là một cách tiếp cận tốt hơn so với một bộ xử lý ngữ cảnh. –

0

Thừa kế mẫu của Django phải bao gồm điều này. Bạn có thể tạo mẫu cơ sở xử lý chức năng thanh bên của bạn. Các chế độ xem khác của bạn mở rộng mẫu này.

Template Inheritance: http://www.djangobook.com/en/1.0/chapter04/#s-template-inheritance

+0

Tôi đã sử dụng mẫu thừa kế. Làm thế nào mà sẽ ngăn cản tôi phải vượt qua biến từ mỗi lần xem vào mẫu? – mipadi

+0

Xin lỗi, có nghĩa là thêm vào câu trả lời ở trên mà bạn có thể tạo/sửa đổi mẫu cơ bản từ tập lệnh bên ngoài chạy vào ngày đầu tiên của tháng. – Harold

0

Một sự kết hợp của các tùy chỉnh mẫu thẻ như đã đề cập trước đây và template fragment caching nên làm các trick.

+0

+1 để lưu bộ nhớ đệm. Tất nhiên, bạn vẫn phải lấy dữ liệu cho phân đoạn nếu nó bị cũ. Chúng tôi đã cố định tra cứu biến trong mã mẫu để cho phép chuyển qua các hàm. Hàm (curried để params của nó không cần phải được thông qua) chỉ được gọi trong quá trình tái tạo fragment. –

Các vấn đề liên quan