Сделайте первую букву заглавной внутри шаблона django

114

Я беру имя из базы данных, которая хранится как myname. Как мне отобразить это в шаблоне Django как Mynameс первой буквой в верхнем регистре.

Mayank
источник

Ответы:

206

Использование встроенного фильтра шаблонов Django с названием title

{{ "myname"|title }}
Аамир Аднан
источник
13
Это работает для строк из одного слова. Но если у вас есть строка из нескольких слов, она будет занимать первую букву каждого отдельного слова, а не первую букву строки.
Valdir Stumm Junior
Однако это бесполезно с такими апострофами, как «Дом моего друга» или «ты урод с прописными буквами», которые превращаются в «Друг» и «Ты».
Timo
2
Это неверный ответ. | title не делает первую букву строки заглавной. Это делает первую букву каждого слова заглавной. Например, «hello world» не становится «Hello world». Он становится «Hello World».
Маркус Линд
9
Используйте {{obj | capfirst}}, чтобы сделать первый символ заглавным. Используя {{obj | title}} делает это Camel Case.
Nrzonline
123

Я знаю, что это немного поздно, но вы можете использовать capfirst :

{{ "waiting for action"|capfirst }}

Это приведет к «Ожидание действия».

облалекс
источник
8
Это правильный ответ, если вы хотите, чтобы первая буква была заглавной.
Рик Вестера
Это гарантирует, что первый символ будет прописным, но не гарантирует, что остальная часть строки будет строчной. например, "hello World" станет "Hello World", а не "Hello world". Что иногда хорошо, но не всегда :)
Фил Гайфорд
Да, но это не имеет отношения к вопросу автора темы. Для обработки дополнительной логики необходимо применять дополнительные фильтры. Например, @ bjorn-garcia обеспечивает решение, чтобы заглавными буквами было только первое слово.
Oblalex
21

Это решение также работает, если у вас несколько слов (например, все заглавные):

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

Это выведет «Предложение, состоящее только из заглавных букв».

Бьорн Гарсия
источник
8

titleФильтр работает отлично, но если у вас есть много-слов строки , как: "some random text"результат будет "Some Random Text". Если вы действительно хотите, чтобы в верхнем регистре была только первая буква всей строки, вам следует создать свой собственный фильтр.

Вы можете создать такой фильтр (следуйте инструкциям о том, как создать собственный шаблонный фильтр из этого документа - это довольно просто):

# 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

Затем вы должны загрузить файл my_filters в свой шаблон и использовать определенный там фильтр:

{% load my_filters %}

...
{{ myname|upfirstletter }}
Валдир Штумм Младший
источник
1
downvote - дублирует существующую функциональность|capfirst
shuckc
Вы можете увидеть реализацию настроек по умолчанию для django здесь: github.com/django/django/blob/master/django/template/…
phyatt
1

У меня это сработало в переменной шаблона.

{{ user.username|title }}

Если пользователь «аль-хасиб», он вернет «аль-хасиб».

или

{{ user.username|capfirst }}

Если пользователь "hasib", то последний вернет "Hasib"

Оба выглядят примерно одинаково, но есть некоторые различия.

хасиб
источник
0

Просто используйте {{myname | capfirst}} в Django шаблонный фильтр capfirst, чтобы прописать первую букву данной строки.

Амита Мохан
источник