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

Odpowiedzi:


205

Korzystanie z wbudowanego filtru szablonu Django o nazwie title

{{ "myname"|title }}

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”


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


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

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.


0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.