2014-12-15 12 views
7

Jak mogę to zrobić w sposób czysto w szablonie Django? Zasadniczo, jeśli A, lub (B i C), chcę pokazać trochę HTML.Nawiasy w django, jeśli instrukcja

Mam zasadniczo to:

{% if user.is_admin lub something.enable_thing i user.can_do_the_thing%}

Teraz, to jest nieco niejednoznaczną. Próbowałem robić

{% if user.is_admin lub (something.enable_thing i user.can_do_thething)%}

Ale z ciebie wolno nawiasach. Doktorzy mówią, że używają zagnieżdżonych ifów (lub elifów w tym przypadku, jak sądzę, jako OR), ale nie chcę powtarzać tego samego HTMLa wewnątrz 2 bloków, co brzmi okropnie.

+0

pozostaw to bez podobieństwa. Myślę, że to działa;) –

+1

Nie chcesz używać zagnieżdżonych jeśli, a także nawiasy są nieważne w bloku 'if', więc wyraźnie framework nie obsługuje tego, o co prosisz, aby przejść z nim i przenieść złożoną logikę do znaczników szablonów lub widoki. –

Odpowiedz

4

możesz zrobić sprawdzenie swojego widoku i przekazać flagę do kontekstu.

show_html = user.is_admin or (something.enable_thing and user.can_do_the_thing) 
context['show_html'] = show_html 

Następnie w szablonie można sprawdzić flagę

{% if show_html %}

+2

Nie wstawiłbym tej logiki do widoku, ale raczej użyłbym niestandardowego tagu. –

+0

Co jeśli jedna z tych zmiennych musi być zmienną iteracyjną pętli? Django mnie rozczarował. – mehmet

9

Jak Mihai Zamfir skomentował powinien działać zgodnie z oczekiwaniami. Jako dokumenty Django wymienia:

stosowania obu i i lub zapisów w tym samym znacznikiem jest dozwolone z i o większą priorytet niż lub przykład:

{%, jeżeli athlete_list i coach_list lub cheerleader_list%}

będzie interpretowany jako:

if (athlete_list and coach_list) lub cheerleader_list

Powiązane problemy