Khi bạn có "chức năng" (cụ thể là một điều kiện if-) bên trong một vòng lặp, bạn có cơ hội để di chuyển này vào chức năng xem.
Đầu tiên
này xây dựng
{% for physician in physicians.all %}
{% if physician.service_patients.count %}
{% endif %}
{% endfor %}
là quá phổ biến mà bạn có nhiều cách để tránh nó.
Thay đổi mô hình của bạn. Thêm patients" method and use it instead of the default query set that you get with a on-to-many relationship. This method of your model has the
nếu service_patients.count` kiểm tra, xóa nó khỏi mẫu của bạn.
Điều này giúp loại bỏ {% if%} khỏi mẫu của bạn, giảm {% cho%} và HTML thực tế, không thể loại bỏ dễ dàng.
Thay đổi chức năng xem của bạn. Viết một vài dòng mã để tạo danh sách các bác sĩ với service_patients thay vì một bộ sưu tập đơn giản của các bác sĩ. Mã này trong hàm xem của bạn có thử nghiệm if service_patients.count
, loại bỏ nó khỏi mẫu của bạn.
Điều này giúp loại bỏ {% if%} khỏi mẫu của bạn, giảm {% cho%} và HTML thực tế, không thể loại bỏ dễ dàng.
Vấn đề là loại bỏ {% if%} để bạn chỉ cần cắt và dán {% cho%} và HTML thực tế. Bằng cách giữ mẫu của bạn chỉ trong HTML (mà không thể được loại bỏ), các chi phí chỉ là {% cho%}
Second
Dường như bạn muốn sử dụng một {% include %}
xây dựng trong bối cảnh hơi khác nhau .
Hoàn toàn không rõ vấn đề với tệp {% include %}
này là gì. Đó là "mong đợi một danh sách các bệnh nhân có tên là patients
" có vẻ ngớ ngẩn một cách hời hợt. Sửa chữa nó, vì vậy nó hy vọng physician.patients
.
Có lẽ bạn muốn sử dụng cùng một danh sách này hai lần. Khi có danh sách được gọi là 'patients'
và một lần có danh sách được gọi là 'physician.patients'
. Trong trường hợp này, hãy xem xét (a) đơn giản hóa hoặc (b) viết một thẻ mẫu.
Dường như bạn có danh sách bệnh nhân đôi khi là một trang độc lập và các lần khác được lặp lại nhiều lần trên một trang phức tạp hơn nhiều. Việc lặp lại danh sách các chi tiết được nhúng trong một số danh sách dài hơn không thực sự là thiết kế trang tốt nhất.Django không giúp bạn với điều này bởi vì - thẳng thắn - nó không dễ dàng cho mọi người sử dụng. Do đó, tùy chọn (a) - xem xét thiết kế lại danh sách "danh sách bệnh nhân trong danh sách bác sĩ" này quá phức tạp.
Tuy nhiên, bạn luôn có thể viết thẻ mẫu để tạo các trang thực sự phức tạp.
Tóm tắt
Có một lý do thực sự tốt tại sao Django mẫu ngôn ngữ có chức năng giới hạn. Tất cả chức năng của bạn phải là một tính năng thiết yếu của mô hình của bạn hoặc tính năng của ứng dụng hiện tại sử dụng mô hình.
Bản trình bày chỉ đơn giản là bản dịch của các đối tượng (và queryset) thành HTML. Không có gì khác
Nguồn
2009-08-12 19:30:47
Cảm ơn bạn! Tôi tiếp tục tìm kiếm một thẻ "as". Tôi đoán "với" công trình quá. – slypete
Như của Django 1.3 bạn cũng có thể sử dụng phong cách: '{% include" sometemplate.html "với spam = trứng, ham =" Ham! " %} '. –