2013-07-21 47 views
5

Trong dự án Django của tôi my_app ứng dụng có một mẫu mà tham chiếu đến tập tin javascript tĩnh:Django file tĩnh không được cập nhật

<script src="{% static 'my_app/my_script.js' %}"></script> 

Khi tôi cài đặt my_script.js trong my_app/templates/my_app, mọi thứ dường như làm việc . Tại một số điểm, tôi ghi đè tệp my_script.js bằng một tập lệnh khác, sao cho my_script.js có nội dung khác ngay bây giờ.

Tuy nhiên, khi tôi tải my_app bằng trình duyệt của mình, nó tải my_script.js cũ, mặc dù nó không còn tồn tại nữa. Tôi có thể giải quyết nó bằng cách nào? Cảm ơn.

Trả lời

2

Bạn có thể thêm tham số cache-busting? Get =. Tôi muốn xác định một thẻ mẫu {% statichash%} đọc tệp và nối thêm một hàm băm của nội dung tệp dưới dạng tham số get. Đây là tương tự, sử dụng thời gian sửa đổi của tập tin thay vì băm, nhưng cùng một ý tưởng:

https://bitbucket.org/ad3w/django-sstatic/src/4401a4bc3058618dfc2eafaee6a23d287a99ede5/sstatic/templatetags/sstatic.py?at=default

+0

Cảm ơn. Tôi có nên sử dụng "? Get = parameter" như sau: ? Và sau đó thêm {% statichash%} vào mẫu?Tôi vừa thử điều đó và dường như nó không thích {% statichash%}. – jazzblue

+0

không, xin lỗi,? Get = tham số chỉ là tôi đang cố gắng thông minh và kết hợp giải thích và ví dụ. Chỉ cần sao chép trong mã thẻ mẫu sstatic từ liên kết bitbucket vào tệp templatetags của bạn (tra cứu tài liệu django về cách thêm một tài liệu nếu bạn chưa có) và sử dụng {% sstatic 'foobar'%} thay vì {% static 'foobar'%}. Cách tiếp cận của Hiếu Nguyễn cũng nên hoạt động, nhưng chưa thử nghiệm, có thể cần phải di chuyển? V = 0000X đến sau%}. – AdamKG

6

Tôi thường sử dụng ?v=00001 hoặc bất kỳ xác định số lượng để buộc bộ nhớ cache rõ ràng trong trình duyệt. Vì vậy, trong trường hợp của bạn nó có thể là:

<script src="{% static 'my_app/my_script.js?v=00001' %}"></script> 

Hoặc:

<script src="{% static 'my_app/my_script.js' %}?v=00001"></script> 

Lần sau bạn thay đổi kịch bản, tăng số lượng đến 00002. Tất nhiên có rất nhiều cách để làm điều này nhưng tôi vẫn thích phương pháp này.

+0

Điều này có vẻ đơn giản và tốt đẹp, thực sự, nhưng bằng cách nào đó Firefox của tôi không thích nó, không chắc chắn về các trình duyệt khác. – jazzblue

+0

Đã cập nhật câu trả lời. Làm thế nào về bây giờ? –

+0

Hoạt động hoàn hảo trong Chrome, câu trả lời hay nhất. Cảm ơn. –

0

Tôi đã sửa nó bằng cách bao gồm viết mã để làm mới trình duyệt. Bằng cách này, nó sẽ luôn nhận được các tệp tĩnh được cập nhật mới nhất thay vì đọc từ bộ nhớ cache của nó.

Có 3 cách để thực hiện việc này.

  1. thủ làm mới trang

Sử dụng hệ điều hành Windows với trình duyệt Google Chrome hoặc IE9, nhấn (Ctrl + F5)

  1. Làm mới trang tại khoảng thời gian nhất định (trong ví dụ này, trình duyệt làm mới sau mỗi 3 giây) <head>

    <meta http-equiv="refresh" content="3" >

    </head>

  2. Làm mới trang khi người dùng nhấp vào một nút

    <form>

    <INPUT TYPE="button" onClick="history.go(0)" VALUE="Refresh">

    </form>

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