ทำให้ตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่ภายในเทมเพลต django


114

ฉันกำลังดึงชื่อจากฐานข้อมูลที่จัดเก็บเป็นmynameไฟล์. ฉันจะแสดงสิ่งนี้ภายในเทมเพลต Django ได้Mynameอย่างไรโดยที่ตัวอักษรตัวแรกจะเป็นตัวพิมพ์ใหญ่

คำตอบ:


206

การใช้ตัวกรองเทมเพลตในตัว Django ที่เรียกว่าtitle

{{ "myname"|title }}

13
ใช้ได้กับสตริงคำเดียว แต่ถ้าคุณมีสตริงหลายคำมันจะอยู่บนตัวอักษรตัวแรกของแต่ละคำแทนที่จะเป็นตัวอักษรตัวแรกของสตริง
Valdir Stumm Junior

มันเป็นวิธีที่ไม่เป็นประโยชน์กับเครื่องหมายวรรคตอนเช่น "บ้านเพื่อนของฉัน" หรือ "คุณเป็นคนประหลาดตัวพิมพ์ใหญ่" ซึ่งจะกลายเป็น "เพื่อนของ" และ "คุณ"
Timo

2
คำตอบนี้ผิด | title ไม่ได้สร้างอักษรตัวแรกของสตริงเป็นตัวพิมพ์ใหญ่ ทำให้อักษรตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่ ตัวอย่างเช่น "สวัสดีชาวโลก" ไม่กลายเป็น "สวัสดีชาวโลก" กลายเป็น "Hello World"
Marcus Lind

9
ใช้ {{obj | capfirst}} เพื่อทำให้ตัวพิมพ์ใหญ่เป็นอักขระตัวแรกเท่านั้น การใช้ {{obj | title}} ทำให้เป็น Camel Case
Nrzonline

123

ฉันรู้ว่ามันช้าไปหน่อย แต่คุณสามารถใช้capfirst :

{{ "waiting for action"|capfirst }}

ซึ่งจะส่งผลให้เป็น "กำลังรอการดำเนินการ"


8
นี่คือคำตอบที่ถูกต้องหากคุณต้องการให้ตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่
Rick Westera

เพื่อให้แน่ใจว่าอักขระตัวแรกเป็นตัวพิมพ์ใหญ่ แต่จะไม่แน่ใจว่าสตริงที่เหลือเป็นตัวพิมพ์เล็ก เช่น "hello World" จะกลายเป็น "Hello World" ไม่ใช่ "Hello world" ซึ่งบางครั้งก็ดี แต่ก็ไม่เสมอไป :)
Phil Gyford

ใช่ แต่ไม่เกี่ยวข้องกับคำถามของผู้เริ่มหัวข้อ ต้องใช้ตัวกรองเพิ่มเติมเพื่อจัดการตรรกะเพิ่มเติม ตัวอย่างเช่น @ 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 }}

หากผู้ใช้เป็น "al hasib" ระบบจะส่งคืน "Al Hasib"

หรือ

{{ user.username|capfirst }}

หากผู้ใช้เป็น 'hasib' ตัวสุดท้ายจะส่งคืน "Hasib"

ทั้งสองมีลักษณะเหมือนกัน แต่มีความแตกต่างบางประการ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.