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.

Respostas:


205

Usando o filtro de template embutido no Django chamado title

{{ "myname"|title }}

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"


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


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

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.


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.