Convierte la primera letra en mayúscula dentro de una plantilla de django


113

Extraigo un nombre de una base de datos que se almacena como myname. ¿Cómo muestro esto dentro de una plantilla de Django como Myname, con la primera letra en mayúsculas?

Respuestas:


205

Usando el filtro de plantilla incorporado de Django llamado título

{{ "myname"|title }}

13
Funciona para cadenas de una sola palabra. Pero, si tiene una cadena de varias palabras, se colocará en la parte superior de la primera letra de cada palabra, en lugar de la primera letra de la cadena.
Valdir Stumm Junior

Sin embargo, nunca es útil con apóstrofos como "La casa de mi amigo" o "eres un fanático de las mayúsculas", que se convierte en "Friend'S" y "You \ 'Re".
Timo

2
Esta respuesta es incorrecta. | title no convierte la primera letra de una cadena en mayúscula. Hace que la primera letra de cada palabra sea mayúscula. Por ejemplo, "hola mundo" no se convierte en "hola mundo". Se convierte en "Hola mundo".
Marcus Lind

9
Utilice {{obj | capfirst}} para convertir en mayúsculas solo el primer carácter. Usando {{obj | title}} lo convierte en Camel Case.
Nrzonline

123

Sé que es un poco tarde, pero puedes usar capfirst :

{{ "waiting for action"|capfirst }}

Esto resultará en "Esperando acción"


8
Esta es la respuesta correcta si solo desea que la primera letra esté en mayúscula.
Rick Westera

Esto asegurará que el primer carácter esté en mayúsculas, pero no asegurará que el resto de la cadena esté en minúsculas. por ejemplo, "hola mundo" se convertiría en "Hola mundo", no "Hola mundo". Lo que a veces está bien, pero no siempre :)
Phil Gyford

Sí, pero esto no es relevante para la pregunta del tema de inicio. Deben aplicarse filtros adicionales para manejar la lógica adicional. Por ejemplo, @ bjorn-garcia proporciona una solución para garantizar que solo se escriba en mayúscula la primera palabra.
oblalex

21

Esta solución también funciona si tiene varias palabras (por ejemplo, todas en mayúsculas):

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

Esto generará una "oración en mayúsculas".


8

El titlefiltro funciona bien, pero si tiene una cadena de muchas palabras como:, "some random text"el resultado será "Some Random Text". Si lo que realmente desea es poner en mayúscula solo la primera letra de toda la cadena, debe crear su propio filtro personalizado.

Puede crear un filtro como este (siga las instrucciones sobre cómo crear un filtro de plantilla personalizado de este documento ; es bastante simple):

# 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

Luego, debe cargar el archivo my_filters en su plantilla y usar el filtro definido allí:

{% load my_filters %}

...
{{ myname|upfirstletter }}

1
|capfirst
voto negativo

Puede ver la implementación de los valores predeterminados de django aquí: github.com/django/django/blob/master/django/template/…
phyatt

1

Me funcionó en la variable de plantilla.

{{ user.username|title }}

Si el usuario es "al hasib", devolverá "Al Hasib".

o

{{ user.username|capfirst }}

Si el usuario es 'hasib', el último devolverá "Hasib"

Ambos se parecen a lo mismo, pero hay algunas diferencias.


0

Simplemente use {{myname | capfirst}} En Django el filtro de plantilla capfirst capatialize la primera letra de una cadena dada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.