2011-08-22 10 views
8

Diciamo che ho il codice in modello come questo:collegamento modello di Django con se 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> 

un problema con questo codice è che aggiunge finale spazio per collegare, in modo collegamento assomiglia collegamento _ con sottolineatura alla fine.

Come rimuovere tali spazi finali? Il tag {% spaceless %} non aiuta molto qui perché rimuove solo gli spazi tra i tag.

risposta

8

In realtà ho trovato una soluzione semplice per il mio problema.

<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> 

Inserendo un tag senza spazi all'interno, si stacca la stringa che ottiene. Posizionamento di fuori

0

Soluzione rapida: utilizzare i commenti html per "sfuggire" agli spazi bianchi non necessari. Soluzione probabilmente migliore: creare un tag modello che mantenga questo condizionale.

0

assecondando l'utilizzo di un singolo tag template - è' d essere buono (e abbastanza facile) per rimuovere questa logica dal modello.

Anche se non è sufficiente usare lo {{ request.user }} per dare esattamente lo stesso risultato di quello che si sta facendo qui?

+0

In Django 1.3 '__unicode__' metodo dei rendimenti modello User self.username –

+0

@marltu - abbastanza sicuro che sia sempre stato così. –

0

Invece di if-else blocco provare ad utilizzare la versione più corta:

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