2011-12-19 13 views
5

Przyjaciel i programista, którego ostatnio szanuję, zalecił unikanie używania "Includes" w szablonach django. Suma ich argumentacji dotyczyła "zła".Django Obejmuje - czy są złe?

Mam problemy ze zrozumieniem logiki; Moja nowicjuszka jest zdania, że ​​to świetny sposób na porządkowanie fragmentów html wielokrotnego użytku i zamiast edytować plik HTML w wielu lokalizacjach, mogę po prostu edytować go w jednym, gdy trzeba wprowadzić zmiany.

Co ci wszyscy geniusze myślą? Proszę podać niektóre wersje Pro i Con używane w szablonach Django:

+0

jeśli suma czyjejś logiki to "to jest złe", to nie jest logika! Dotyczy to zarówno twórców, jak i osób religijnych :) – Spacedman

Odpowiedz

9

Wygląda na nieco dziwną opinię. Obejmuje to doskonale obowiązującą część języka szablonów, tak było od pierwszego dnia i nigdy nie zalecano ani AFAIK, ani nie jest on przestarzały.

Twój przyjaciel może próbować powiedzieć, że powinieneś polegać bardziej na dziedziczeniu szablonów (co jest przeciwieństwem). To prawda tak długo, jak to możliwe - w większości przypadków lepiej jest komponować szablony bloków, które zastępują lub rozszerzają te zdefiniowane w szablonach nadrzędnych. Ale na pewno zawiera przypadek użycia.

Jedyny inny powód, dla którego mógłby powiedzieć, że to z powodu dodanego ładowania systemu plików, to szablony z dysku. W takim przypadku jest zdecydowanie nie na miejscu - ponownie model dziedziczenia szablonów, który z pewnością jest zalecany, miałby dokładnie to samo trafienie; i obu można uniknąć, stosując opcjonalny program ładujący do systemu plików buforujących.

3

Jak wspomniano przez Daniela, obejmuje są całkowicie ważne z powodów, o których wspomniał. W związku z tym trudno jest dać Pro i Con, ponieważ to naprawdę zależy od tego, co próbujesz osiągnąć.

Ogólnie najlepiej jest zdefiniować wspólne elementy strony internetowej wewnątrz znaczników bloków w szablonie bazowym i użyć dziedziczenia szablonów, aby zmienić potrzebne części na każdej stronie. Jeśli jednak potrzebujesz po prostu użyć fragmentu tekstu w wielu miejscach, opcja "zawiera" będzie idealna.

Należy zwrócić uwagę na to, że obejmuje nie może zawierać znaczników bloków, ponieważ są one renderowane samodzielnie bez znajomości strony nadrzędnej. Aby to lepiej zrozumieć, patrz notatka z template docs on includes lub tego (bez błędu) bug report. Jeśli potrzebujesz tej funkcji, warto zastanowić się, czy powinieneś przenieść dołączony plik do szablonu bazowego wewnątrz znacznika bloku.

2

Może mówi, że lepiej będzie pisać niestandardowe znaczniki. Więc zamiast:

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

należy zrobić:

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

include metoda polega na delegowaniu bloga będącego w obiekcie o nazwie „post”, natomiast sposób niestandardowy tag pozwala formatować wszystko. Na przykład, jeśli miał stronę, która w porównaniu z dwóch blogach, należy wysłać je jako jako „post1” i „post2” w kontekście i zrobić:

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

Znacznie bardziej wielokrotnego użytku. Z włączeniami musiałbyś zmienić nazwę każdego z post1 i post2 jako "post", a następnie dołączyć szablon ...

Powiązane problemy