Rendi la prima lettera maiuscola all'interno di un modello django


114

Sto estraendo un nome da un database che è memorizzato come myname. Come faccio a visualizzarlo all'interno di un modello Django come Myname, con la prima lettera in maiuscolo.

Risposte:


205

Utilizzando il filtro del modello integrato di Django chiamato titolo

{{ "myname"|title }}

13
Funziona per stringhe di una sola parola. Ma, se hai una stringa composta da più parole, verrà posta in alto la prima lettera di ogni singola parola, invece della prima lettera della stringa.
Valdir Stumm Junior

Non è comunque utile con apostrofi come "La casa del mio amico" o "sei un mostro in maiuscolo" che diventa "Amico" e "Tu \" Re ".
Timo

2
Questa risposta è sbagliata. | title non rende maiuscola la prima lettera di una stringa. Rende la prima lettera di ogni parola maiuscola. Ad esempio, "ciao mondo" non diventa "ciao mondo". Diventa "Hello World".
Marcus Lind

9
Usa {{obj | capfirst}} per rendere maiuscolo solo il primo carattere. Utilizzando {{obj | title}} lo rende Camel Case.
Nrzonline

123

So che è un po 'tardi, ma puoi usare capfirst :

{{ "waiting for action"|capfirst }}

Ciò risulterà in "In attesa di azione"


8
Questa è la risposta corretta se desideri che la prima lettera sia maiuscola.
Rick Westera

Ciò garantirà che il primo carattere sia maiuscolo, ma non garantirà che il resto della stringa sia minuscolo. es. "ciao mondo" diventerebbe "ciao mondo", non "ciao mondo". Il che a volte va bene, ma non sempre :)
Phil Gyford

Sì, ma questo non è rilevante per la domanda del topic starter. È necessario applicare filtri aggiuntivi per gestire la logica aggiuntiva. Ad esempio, @ bjorn-garcia fornisce una soluzione per garantire che solo la prima parola sia maiuscola.
oblalex

21

Questa soluzione funziona anche se hai più parole (ad esempio tutte maiuscole):

{{ "ALL CAPS SENTENCE"|lower|capfirst }}

Questo produrrà "Frase tutto maiuscolo".


8

Il titlefiltro funziona bene, ma se hai una stringa di molte parole come:, "some random text"il risultato sarà "Some Random Text". Se quello che vuoi veramente è mettere in maiuscolo solo la prima lettera dell'intera stringa, dovresti creare il tuo filtro personalizzato.

Puoi creare un filtro come questo (segui le istruzioni su come creare un filtro modello personalizzato da questo documento - è 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

Quindi, dovresti caricare il file my_filters nel tuo modello e usare il filtro definito lì:

{% load my_filters %}

...
{{ myname|upfirstletter }}

1
downvote - duplica le funzionalità esistenti di|capfirst
shuckc

Puoi vedere l'implementazione delle impostazioni predefinite di django qui: github.com/django/django/blob/master/django/template/…
phyatt

1

Ha funzionato per me nella variabile del modello.

{{ user.username|title }}

Se l'utente è "al hasib", restituirà "Al Hasib"

o

{{ user.username|capfirst }}

Se l'utente è 'hasib', l'ultimo restituirà "Hasib"

Entrambi hanno lo stesso aspetto ma ci sono alcune differenze.


0

Basta usare {{myname | capfirst}} In Django il filtro del template capfirst capazializza la prima lettera di una data stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.