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.