Сделайте первую букву заглавной внутри шаблона 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.