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.

Réponses:


205

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

{{ "myname"|title }}

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"


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


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

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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.