2010-11-17 34 views
10

Tôi đang sử dụng ứng dụng django-compressor trong Django 1.2.3 để rút gọn và hợp nhất một số tệp CSS và JS được bao gồm. Trong một mẫu cơ sở, tôi cóMáy nén Django và mẫu thừa kế

{% load compress %} 
{% compress js %} 
{% block js %} 
<script type="text/javascript" src="/site_media/js/jquery.query-2.1.7.js"> 
{% endblock %} 

và trong một đứa trẻ,

{% block js %} 
{{block.super}} 
<script type="text/javascript" src="/site_media/js/jquery.validate.min.js"> 
{% endblock %} 

Khi các mẫu render, các thẻ script đầu tiên được giảm bớt một cách chính xác, nhưng thứ hai là không. Trong các tình huống tương tự, tôi đã xác nhận rằng vấn đề là thừa kế.

Tôi không muốn tiếp tục sử dụng thẻ nén trong mẫu con vì một nửa điểm sử dụng ứng dụng này là hợp nhất các tệp và cắt giảm các yêu cầu HTTP. Tui bỏ lỡ điều gì vậy? Có một giải pháp khác mà tôi nên xem xét?

Trả lời

14

tôi sử dụng django-máy nén với Django 1.2, và tôi đặt nó lên như thế này:

{% compress js %} 
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-1.4.2.min.js"></script> 
{% block extra_compressed_js %}{% endblock %} 
{% endcompress %} 

{% block external_js %}{% endblock %} 

Và với extra_compressed_js khối của tôi, tôi sẽ thường xuyên sử dụng phương pháp bạn mô tả, với {{ block.super }} để thêm js thông qua thừa kế . Nó làm việc cho tôi mà không gặp bất kỳ rắc rối nào. Một điều mà bạn phải cẩn thận là tất cả JS cần nén để có sẵn trên hệ thống tập tin cục bộ. Đó là lý do tại sao tôi có một khối external_js riêng biệt cho JS xuất phát từ một nguồn bên ngoài.

Nghe có vẻ như tôi đang xảy ra chuyện khác. Đảm bảo bản sao máy nén của bạn được cập nhật và sau đó kiểm tra thừa kế của bạn để đảm bảo rằng máy tính đó hoạt động chính xác. Một cách để làm điều này là bằng cách đặt COMPRESS=False trong cài đặt của bạn và đảm bảo rằng tất cả javascript mà bạn muốn đưa vào thực sự hiển thị trong mẫu được hiển thị.

+0

Nhìn vào điều này ngay bây giờ. –

+0

Vô tình bao gồm một bảng định kiểu bên ngoài trong nén của tôi- cảm ơn rất nhiều! –

+0

điều này vẫn hoạt động nếu bạn đang sử dụng tính năng nén ngoại tuyến, ví dụ: 'django-admin.py compress'? Trong khi nó hoạt động để nén theo yêu cầu, trong khi nén ngoại tuyến, nó dường như không tạo đúng các tệp cho các trang kế thừa từ trang này. [bài viết liên quan] (http://stackoverflow.com/questions/9559018/does-django-compressor-work-with-template-inheritance) – MrColes

-1

Tôi không biết nếu điều này sẽ làm việc, nhưng có vẻ như đáng để thử:

đầu tiên có các khối trong mẫu cơ sở của bạn:

{% compress js %} 
{% block js %} 
{% endblock %} 
{% endcompress %} 

{% compress css %} 
{% block css %} 
{% endblock %} 
{% endcompress %} 

và sau đó trong một mẫu trẻ đưa ra:

{% block js %} 
{{ block.super }} 
<script type="text/javascript" src="/site_media/js/jquery.query-2.1.7.js"> 
{% endblock %} 

Luôn sử dụng block.super. Như tôi đã nói, tôi không biết liệu nó có hiệu quả hay không, nhưng có thể.