2009-09-11 32 views
5

Tôi đang sử dụng django-compress với thời gian hết hạn trong tương lai cho các tệp css và js của tôi. Hoạt động tuyệt vời.Cách tốt nhất để thiết lập tương lai hết hạn trong tương lai trên hình ảnh với Django là gì?

Tôi muốn làm điều gì đó tương tự cho các nội dung tĩnh khác (hình ảnh, flash, v.v ...). Tôi có thể đặt một tương lai xa hết hạn trên nội dung này, nhưng tôi phải đổi tên thủ công các tệp khi chúng thay đổi.

Có cách nào tốt hơn để xử lý việc này không?

Trả lời

4

Với django-compress, bạn đang xử lý CSS và JS dưới dạng tệp động - điều đó là tốt. Tuy nhiên, các tập tin khác là tĩnh - và Django không thực sự muốn phục vụ chúng. Chúng nên được phục vụ trực tiếp bởi Apache hoặc máy chủ web khác.

Với Apache, bạn muốn đặt một cái gì đó giống như

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" 
</FilesMatch> 

trong .htaccess hoặc cấu hình Apache toàn cầu.

Cập nhật: Trả lời nhận xét của bạn - Rất tiếc, tôi không hiểu sắc thái của câu hỏi của bạn. Không có nhiều việc bạn có thể làm để tránh sử dụng URL khác để chỉ ra cho khách hàng rằng tệp (ví dụ: hình ảnh) đã thay đổi. Điều này được khuyến nghị bằng ví dụ: Apache và YAHOO!

Triển khai IMO này không quá khó. Nó có hai phần:

  1. Sử dụng thẻ (đây là useful snippet) để tạo URL được phiên bản cho tệp phương tiện sẽ xuất hiện trong HTML của bạn. URL được phiên bản có thể là URL cơ sở với phiên bản được chèn, ví dụ: /media/3/header.png nơi tệp thực sự giữ nguyên là /media/header.png trên máy chủ.
  2. Sử dụng công cụ như mod_rewrite để chuyển đổi URL đến thành giá trị chuẩn, tức là yêu cầu /media/3/header.png được chuyển đổi thành /media/header.png. This article mô tả tính năng chi tiết hơn.
+0

Tôi biết cách đặt tương lai xa hết hạn trên hình ảnh, nhưng tôi đã tự hỏi liệu có cách nào tốt hơn để xử lý khi tôi chỉnh sửa hình ảnh hay không. Giả sử tôi có header.png với thời gian hết hạn trong tương lai. Sau đó tôi chỉnh sửa nó trong photoshop. Tôi sẽ phải đặt tên nó là header1.png và sau đó thay đổi bất kỳ tham chiếu nào trong đoạn mã thành header1.png. Không lý tưởng cho tôi. –

6

Cách tốt nhất là tham chiếu đến tệp tĩnh của bạn bằng URL được phiên bản và cung cấp cho máy chủ web của bạn quy tắc ghi đè để bỏ qua phiên bản.

Xem Django hoàn dụ here, trong đó bao gồm một expire_tag helper (tạo ra bởi Arne Brodowski):

<link rel="stylesheet" type="text/css" 
    href="{{ MEDIA_URL }}{% expire_tag "css/reset.css" %}" /> 

Và Apache có liên quan viết lại quy tắc.

+0

Bây giờ là khá trơn. Tôi sẽ phải nhớ điều đó. –

+0

Đẹp, nhược điểm nhỏ là cách tiếp cận này không phiên bản hình ảnh được đề cập bên trong css. – Bula