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


114

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

Ответы:


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, чтобы прописать первую букву данной строки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.