2011-12-19 33 views
5

Một người bạn và nhà phát triển mà tôi tôn trọng gần đây đã khuyên rằng tôi tránh sử dụng 'Bao gồm' trong các mẫu django. Tổng số đối số của họ là bao gồm 'ác'.Django Bao gồm - họ có xấu không?

Tôi gặp sự cố khi hiểu logic; Ý kiến ​​mới của tôi là họ là một cách tuyệt vời để tổ chức các đoạn html có thể tái sử dụng và thay vì phải chỉnh sửa html ở nhiều vị trí, tôi có thể chỉnh sửa nó một cách đơn giản khi thay đổi phải được thực hiện.

Bạn nghĩ gì về thiên tài? Xin vui lòng cung cấp một số Pro và Con của việc sử dụng bao gồm trong các mẫu Django

+0

nếu tổng logic của ai đó là 'điều này là xấu' thì đó không phải là logic! Điều này đúng với các nhà phát triển vì nó dành cho người tôn giáo :) – Spacedman

Trả lời

9

Có vẻ như một ý kiến ​​hơi lạ. Bao gồm là một phần hoàn toàn hợp lệ của ngôn ngữ mẫu, đã được như vậy kể từ ngày 1 và chưa bao giờ AFAIK được đề xuất chống lại hoặc không dùng nữa.

Bạn của bạn có thể đang cố gắng nói rằng bạn nên dựa nhiều hơn vào kế thừa mẫu (loại đối sánh này bao gồm). Đó là sự thật như xa như nó đi - hầu hết thời gian tốt hơn để soạn các mẫu của bạn của khối mà ghi đè hoặc mở rộng những người được xác định trong các mẫu phụ huynh. Nhưng chắc chắn có một trường hợp sử dụng để bao gồm.

Lý do duy nhất khác mà anh ấy có thể nói là do tải hệ thống tệp được thêm vào bao gồm các mẫu từ đĩa. Trong trường hợp đó, anh ấy chắc chắn không còn đánh dấu - một lần nữa, mô hình kế thừa mẫu chắc chắn là được đề xuất sẽ có cùng một lần truy cập; và cả hai có thể tránh được bằng cách sử dụng bộ đệm hệ thống tập tin bộ nhớ đệm tùy chọn.

3

Như đã đề cập bởi Daniel, bao gồm là hoàn toàn hợp lệ vì những lý do ông đã đề cập. Như vậy rất khó để cung cấp cho Pro và Con bởi vì nó thực sự phụ thuộc vào những gì bạn đang cố gắng để thực hiện.

Nói chung tốt nhất là xác định các yếu tố chung của trang web bên trong thẻ khối trong mẫu cơ sở và sử dụng mẫu thừa kế để thay đổi các phần bạn cần trên mỗi trang. Tuy nhiên, nếu bạn chỉ cần sử dụng lại một đoạn văn bản ở nhiều nơi, một 'bao gồm' sẽ là hoàn hảo.

Một điểm quan trọng cần lưu ý là bao gồm không được chứa thẻ chặn khi chúng được hiển thị mà không có bất kỳ kiến ​​thức nào về trang gốc. Để hiểu rõ hơn, hãy xem ghi chú từ số template docs on includes hoặc số này (không phải lỗi) bug report. Nếu bạn thấy mình cần chức năng này, có thể đáng xem xét nếu bạn nên di chuyển tệp được bao gồm vào một mẫu cơ sở bên trong một thẻ khối.

2

Anh ấy có thể nói rằng bạn nên viết các thẻ tùy chỉnh tốt hơn. Vì vậy, thay vì phải:

{% for post in blog %} 
{% include "blog.tmpl" %} 
{% endfor %} 

bạn nên làm:

{% for post in blog %} 
{% formatPost post %} 
{% endfor %} 

Các bao gồm phương pháp dựa trên đăng tải trên blog là trong một đối tượng gọi là 'bài', trong khi đó phương pháp thẻ tùy chỉnh cho phép bạn định dạng gì cả. Ví dụ: nếu bạn có một trang so sánh hai bài đăng trên blog, bạn sẽ gửi chúng dưới dạng 'post1' và 'post2' trong ngữ cảnh và làm:

<h1>John Said</h1> 
    {% formatPost post1 %} 
    <h1>And Fred Said</h1> 
    {% formatPost post2 %} 

Tái sử dụng nhiều hơn. Với bao gồm bạn sẽ phải đổi tên mỗi post1 và post2 thành 'post' và sau đó bao gồm các mẫu ...

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