Utwórz pierwszą wielką literę wewnątrz szablonu django

114

Pobieram nazwę z bazy danych, która jest przechowywana jako myname. Jak wyświetlić to w szablonie Django jako Myname, z pierwszą literą wielką.

Mayank
źródło

Odpowiedzi:

205

Korzystanie z wbudowanego filtru szablonu Django o nazwie title

{{ "myname"|title }}
Aamir Adnan
źródło
13
Działa dla ciągów składających się z pojedynczych słów. Ale jeśli masz ciąg składający się z wielu słów, to pierwsza litera każdego słowa zostanie umieszczona na górze zamiast pierwszej litery ciągu.
Valdir Stumm Junior
Jednak nie jest użyteczne w przypadku apostrofów takich jak „dom mojego przyjaciela” lub „jesteś dziwakiem z wielkich liter”, które stają się „przyjacielem” i „ty”.
Timo
2
Ta odpowiedź jest błędna. | tytuł nie tworzy wielkiej pierwszej litery ciągu. Powoduje, że pierwsza litera każdego słowa jest wielka. Przykład: „Witaj świecie” nie zmienia się w „Witaj świecie”. Zmienia się na „Hello World”.
Marcus Lind
9
Użyj {{obj | capfirst}}, aby wielką literą był tylko pierwszy znak. Korzystanie z {{obj | title}} sprawia, że ​​jest to Camel Case.
Nrzonline
123

Wiem, że jest trochę późno, ale możesz użyć capfirst :

{{ "waiting for action"|capfirst }}

Spowoduje to „Oczekiwanie na działanie”

oblalex
źródło
8
To jest prawidłowa odpowiedź, jeśli chcesz, aby pierwsza litera była tylko wielka.
Rick Westera
Zapewni to, że pierwszy znak będzie wielką literą, ale nie zapewni, że reszta ciągu będzie mała. np. „Hello World” zmieni się w „Hello World”, a nie „Hello world”. Co czasami jest w porządku, ale nie zawsze :)
Phil Gyford
Tak, ale nie dotyczy to kwestii startera tematu. Aby obsłużyć dodatkową logikę, należy zastosować dodatkowe filtry. Na przykład @ bjorn-garcia zapewnia rozwiązanie zapewniające, że tylko pierwsze słowo będzie pisane wielką literą.
oblalex
21

To rozwiązanie działa również, jeśli masz wiele słów (na przykład wszystkie litery):

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

Spowoduje to wyświetlenie tekstu „Zdanie z dużymi literami”.

Bjorn Garcia
źródło
8

titleFiltr działa prawidłowo, ale jeśli masz ciąg wielu-słowa jak: "some random text"wynik będzie "Some Random Text". Jeśli naprawdę chcesz pisać wielką literą tylko pierwszą literę całego ciągu, powinieneś utworzyć własny niestandardowy filtr.

Możesz utworzyć taki filtr (postępuj zgodnie z instrukcjami, jak utworzyć niestandardowy filtr szablonu na podstawie tego dokumentu - to całkiem proste):

# 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

Następnie powinieneś załadować plik my_filters do swojego szablonu i użyć zdefiniowanego tam filtra:

{% load my_filters %}

...
{{ myname|upfirstletter }}
Valdir Stumm Junior
źródło
1
głos w dół - powiela istniejącą funkcjonalność|capfirst
shuckc
Możesz zobaczyć implementację domyślnych ustawień django tutaj: github.com/django/django/blob/master/django/template/…
phyatt
1

U mnie zadziałało w zmiennej szablonowej.

{{ user.username|title }}

Jeśli użytkownik to „al hasib”, zwróci „Al Hasib”

lub

{{ user.username|capfirst }}

Jeśli użytkownik to „hasib”, ostatni zwróci „Hasib”

Oba wyglądają podobnie, ale są pewne różnice.

hasib
źródło
0

Po prostu użyj w {{myname | capfirst}} Django filtru szablonowego capfirst kapatializującego pierwszą literę danego łańcucha.

Amitha Mohan
źródło