Faça a primeira letra maiúscula dentro de um modelo django

114

Estou puxando um nome de um banco de dados que está armazenado como myname. Como faço para exibir isso dentro de um modelo Django como Myname, com a primeira letra em maiúscula.

Mayank
fonte

Respostas:

205

Usando o filtro de template embutido no Django chamado title

{{ "myname"|title }}
Aamir Adnan
fonte
13
Funciona com strings de uma única palavra. Mas, se você tiver uma string com várias palavras, ela irá colocar a primeira letra de cada palavra em cima, em vez da primeira letra da string.
Valdir Stumm Junior
No entanto, não é útil com apóstrofos como "A casa do meu amigo" ou "você é louco por letras maiúsculas", que se torna "Amigo" e "Você é".
Timo
2
Esta resposta está errada. | o título não torna a primeira letra de uma string maiúscula. Faz com que a primeira letra de cada palavra seja maiúscula. Exemplo, "hello world" não se transforma em "Hello world". Torna-se "Hello World".
Marcus Lind
9
Use {{obj | capfirst}} para tornar maiúsculas apenas o primeiro caractere. Usando {{obj | title}} torna-o Camel Case.
Nrzonline
123

Eu sei que é um pouco tarde, mas você pode usar capfirst :

{{ "waiting for action"|capfirst }}

Isso resultará em "Aguardando ação"

oblalex
fonte
8
Esta é a resposta correta se você quiser apenas a primeira letra maiúscula.
Rick Westera
Isso garantirá que o primeiro caractere esteja em maiúsculas, mas não garantirá que o resto da string esteja em minúsculas. por exemplo, "hello World" se tornaria "Hello World", não "Hello world". O que às vezes é bom, mas nem sempre :)
Phil Gyford
Sim, mas isso não é relevante para a questão do iniciador do tópico. Filtros adicionais devem ser aplicados para lidar com lógica extra. Por exemplo, @ bjorn-garcia fornece uma solução para garantir que apenas a primeira palavra seja maiúscula.
oblalex
21

Esta solução também funciona se você tiver várias palavras (por exemplo, todas em maiúsculas):

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

Isso produzirá "Frase em maiúsculas".

Bjorn Garcia
fonte
8

O titlefiltro funciona bem, mas se você tiver uma string de muitas palavras como:, "some random text"o resultado será "Some Random Text". Se o que você realmente deseja é maiúscula apenas a primeira letra de toda a string, você deve criar seu próprio filtro personalizado.

Você pode criar um filtro como este (siga as instruções sobre como criar um filtro de modelo personalizado a partir deste documento - é muito simples):

# 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

Então, você deve carregar o arquivo my_filters em seu modelo e usar o filtro definido lá:

{% load my_filters %}

...
{{ myname|upfirstletter }}
Valdir Stumm Junior
fonte
1
downvote - duplica a funcionalidade existente de|capfirst
shuckc
Você pode ver a implementação dos padrões django aqui: github.com/django/django/blob/master/django/template/…
phyatt
1

Funcionou para mim na variável de modelo.

{{ user.username|title }}

Se o usuário for "al hasib", ele retornará "Al Hasib"

ou

{{ user.username|capfirst }}

Se o usuário for 'hasib', o último retornará "Hasib"

Ambos são parecidos, mas há algumas diferenças.

hasib
fonte
0

Apenas use {{myname | capfirst}} no Django o filtro de template capprimeiro capatializar a primeira letra de uma dada string.

Amitha Mohan
fonte