2013-01-10 14 views

risposta

114

Django filtro modello di built-in chiamato title

{{ "myname"|title }} 
+0

Questo ha funzionato! grazie Aamir :) – Mayank

+0

Benvenuto, non dimenticare di accettare la risposta. –

+7

Funziona per stringhe a parola singola. Ma, se si dispone di una stringa di più parole, sta andando in alto la prima lettera di ogni singola parola, invece della prima lettera della stringa. –

10

Il filtro title funziona bene, ma se si dispone di una stringa di molti-parole come: "some random text", il risultato sta per essere "Some Random Text". Se ciò che si desidera veramente è in maiuscolo solo la prima lettera dell'intera stringa, è necessario creare il proprio filtro personalizzato.

Si potrebbe creare un filtro come questo (seguire le istruzioni su come creare un filtro modello personalizzato da questo doc - è abbastanza semplice):

# yourapp/templatetags/my_filters.py 
from django import template 

register = template.Library() 

@register.filter() 
def upfirstletter(value): 
    first = value[0] if len(value) > 0 else '' 
    remaining = value[1:] if len(value) > 1 else '' 
    return first.upper() + remaining 

Poi, si dovrebbe caricare il file my_filters al vostro modello , e utilizzare il filtro definito lì:

{% load my_filters %} 

... 
{{ myname|upfirstletter }} 
70

lo so che è un po 'tardi, ma è possibile utilizzare capfirst:

{{ "waiting for action"|capfirst }} 

Ciò si tradurrà in "In attesa di azione"

+3

Questa è la risposta corretta se si desidera solo la prima lettera in maiuscolo. –

+0

Sì, e questo è mostrato nell'esempio. – oblalex

+0

Ciò garantisce che il primo carattere sia maiuscolo, ma non garantisce che il resto della stringa sia in minuscolo. per esempio. "Hello World" diventerebbe "Hello World", non "Hello world". Che a volte va bene, ma non sempre :) –

Problemi correlati