Mettre la première lettre en majuscule dans un modèle django

114

Je tire un nom d'une base de données qui est stockée sous myname. Comment puis-je afficher cela dans un modèle Django sous la forme Myname, la première lettre étant en majuscule.

Mayank
la source

Réponses:

205

Utilisation du filtre de modèle intégré Django appelé title

{{ "myname"|title }}
Aamir Adnan
la source
13
Cela fonctionne pour les chaînes d'un seul mot. Mais, si vous avez une chaîne de plusieurs mots, la première lettre de chaque mot sera supérieure au lieu de la première lettre de la chaîne.
Valdir Stumm Junior
Il n'est cependant pas utile avec des apostrophes comme "la maison de mon ami" ou "vous êtes un monstre en majuscules" qui devient "ami" et "vous" re ".
Timo
2
Cette réponse est fausse. | title ne met pas la première lettre d'une chaîne en majuscule. Il met la première lettre de chaque mot en majuscule. Exemple, "bonjour le monde" ne devient pas "bonjour le monde". Cela devient "Hello World".
Marcus Lind
9
Utilisez {{obj | capfirst}} pour ne mettre en majuscule que le premier caractère. Utilisation de {{obj | title}} en fait Camel Case.
Nrzonline
123

Je sais qu'il est un peu tard, mais vous pouvez utiliser capfirst :

{{ "waiting for action"|capfirst }}

Cela se traduira par "En attente d'action"

oblalex
la source
8
C'est la bonne réponse si vous voulez juste que la première lettre soit en majuscule.
Rick Westera
Cela garantira que le premier caractère est en majuscule, mais ne garantira pas que le reste de la chaîne est en minuscule. Par exemple, "hello World" deviendrait "Hello World", et non "Hello world". Ce qui est parfois bien, mais pas toujours :)
Phil Gyford
Oui, mais ce n'est pas pertinent pour la question du sujet de départ. Des filtres supplémentaires doivent être appliqués pour gérer une logique supplémentaire. Par exemple, @ bjorn-garcia fournit une solution pour s'assurer que seul le premier mot est en majuscule.
oblalex
21

Cette solution fonctionne également si vous avez plusieurs mots (par exemple en majuscules):

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

Cela affichera "All caps phrase".

Bjorn Garcia
la source
8

Le titlefiltre fonctionne bien, mais si vous avez une chaîne de plusieurs mots comme:, "some random text"le résultat sera "Some Random Text". Si vous voulez vraiment mettre en majuscule uniquement la première lettre de toute la chaîne, vous devez créer votre propre filtre personnalisé.

Vous pouvez créer un filtre comme celui-ci (suivez les instructions pour créer un filtre de modèle personnalisé à partir de ce document - c'est assez 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

Ensuite, vous devez charger le fichier my_filters dans votre modèle et utiliser le filtre défini ici:

{% load my_filters %}

...
{{ myname|upfirstletter }}
Valdir Stumm Junior
la source
1
downvote - duplique la fonctionnalité existante de|capfirst
shuckc
Vous pouvez voir l'implémentation des valeurs par défaut de django ici: github.com/django/django/blob/master/django/template/…
phyatt
1

Cela a fonctionné pour moi dans la variable de modèle.

{{ user.username|title }}

Si l'utilisateur est "al hasib" alors il retournera "Al Hasib"

ou

{{ user.username|capfirst }}

Si l'utilisateur est 'hasib' alors le dernier retournera "Hasib"

Les deux ressemblent à quelque chose, mais il y a quelques différences.

hasib
la source
0

Il suffit d'utiliser {{myname | capfirst}} dans Django le modèle de filtre capfirst capatialize la première lettre d'une chaîne donnée.

Amitha Mohan
la source