2011-08-22 33 views
8

Powiedzmy mam kod w szablonie tak:Django Link szablonu jeśli else

<a href="#"> 
    {% if request.user.first_name or request.user.last_name %} 
     {{ request.user.first_name }} {{ request.user.last_name }} 
    {% else %} 
     {{ request.user }} 
    {% endif %} 
</a> 

Problem z tym kodem jest, że dodaje tylną przestrzeń do połączenia, więc ogniwo wygląda linku _ z podkreśleniem na końcu.

Jak usunąć takie spacje końcowe? {% spaceless %} Znacznik nie pomaga tutaj, ponieważ usuwa tylko spacje między tagami.

Odpowiedz

8

Rzeczywiście znalazłem proste rozwiązanie mojego problemu.

<a href="#">{% spaceless %} 
    {% if request.user.first_name or request.user.last_name %} 
     {{ request.user.first_name }} {{ request.user.last_name }} 
    {% else %} 
     {{ request.user }} 
    {% endif %} 
{% endspaceless %}</a> 

Umieszczając w środku znacznik bez spacerów, rozbiera ciąg, który dostaje. Umieszczenie poza

0

Szybkie obejście: użyj komentarzy html, aby "uciec" niepotrzebnym spacji. Prawdopodobnie lepsze rozwiązanie: utwórz znacznik szablonu, który spełnia to warunkowe.

0

wysyłającego wykorzystanie pojedynczego szablon - to d być dobrym (i dość łatwym), aby usunąć tę logikę z szablonu.

Mimo, że nie tylko używanie {{ request.user }} daje dokładnie taki sam wynik, jak tutaj?

+0

w Django 1.3 '__unicode__' metoda użytkownika modelowych zwrotów self.username –

+0

@marltu - całkiem pewien, że to zawsze w ten sposób. –

0

Zamiast if-else blok spróbuj użyć krótszego wersję:

{{ user.get_full_name|default:user.get_username }}