Đặt chữ hoa đầu tiên bên trong mẫu django


113

Tôi đang lấy tên từ cơ sở dữ liệu được lưu trữ dưới dạng myname. Làm cách nào để hiển thị nội dung này bên trong mẫu Django Myname, với chữ cái đầu tiên là chữ hoa.

Câu trả lời:


205

Sử dụng bộ lọc mẫu tích hợp sẵn Django được gọi là tiêu đề

{{ "myname"|title }}

13
Nó hoạt động cho các chuỗi một từ. Tuy nhiên, nếu bạn có một chuỗi nhiều từ, nó sẽ viết hoa chữ cái đầu tiên của mỗi từ đơn lẻ, thay vì chữ cái đầu tiên của chuỗi.
Valdir Stumm Junior

Nó là howerver không hữu ích với các dấu nháy đơn như "Nhà của bạn tôi" hoặc "bạn là một kẻ kỳ dị viết hoa" mà trở thành "Friend'S" và "You \ 'Re".
Timo

2
Câu trả lời này là sai. | title không viết hoa chữ cái đầu tiên của chuỗi. Nó làm cho chữ cái đầu tiên của mỗi từ viết hoa. Ví dụ, "hello world" không trở thành "Hello world". Nó trở thành "Hello World".
Marcus Lind

9
Sử dụng {{obj | capfirst}} để chỉ viết hoa là ký tự đầu tiên. Sử dụng {{obj | title}} làm cho nó Camel Case.
Nrzonline

123

Tôi biết là hơi muộn, nhưng bạn có thể sử dụng capfirst :

{{ "waiting for action"|capfirst }}

Điều này sẽ dẫn đến "Đang chờ hành động"


8
Đây là câu trả lời chính xác nếu bạn chỉ muốn viết hoa chữ cái đầu tiên.
Rick Westera

Điều này sẽ đảm bảo ký tự đầu tiên là chữ hoa, nhưng sẽ không đảm bảo phần còn lại của chuỗi là chữ thường. ví dụ: "hello World" sẽ trở thành "Hello World", không phải "Hello world". Đó là đôi khi tốt, nhưng không phải lúc nào :)
Phil Gyford

Có, nhưng điều này không liên quan đến câu hỏi của người bắt đầu chủ đề. Bộ lọc bổ sung phải được áp dụng để xử lý logic bổ sung. Ví dụ: @ bjorn-garcia cung cấp một giải pháp để đảm bảo chỉ viết hoa từ đầu tiên.
oblalex

21

Giải pháp này cũng hoạt động nếu bạn có nhiều từ (ví dụ: tất cả các chữ hoa):

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

Điều này sẽ xuất ra "Tất cả các câu viết hoa".


8

Bộ titlelọc hoạt động tốt, nhưng nếu bạn có một chuỗi nhiều từ như "some random text":, kết quả sẽ như vậy "Some Random Text". Nếu những gì bạn thực sự muốn là chỉ viết hoa chữ cái đầu tiên của toàn bộ chuỗi, bạn nên tạo bộ lọc tùy chỉnh của riêng mình.

Bạn có thể tạo một bộ lọc như thế này (làm theo hướng dẫn về cách tạo bộ lọc mẫu tùy chỉnh từ tài liệu này - nó khá đơn giản):

# 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

Sau đó, bạn nên tải tệp my_filters tại mẫu của mình và sử dụng bộ lọc được xác định ở đó:

{% load my_filters %}

...
{{ myname|upfirstletter }}

1
downvote - sao chép chức năng hiện có của|capfirst
shuckc 12/03/18

Bạn có thể xem việc triển khai các mặc định django tại đây: github.com/django/django/blob/master/django/template/…
phyatt

1

Nó làm việc cho tôi trong biến mẫu.

{{ user.username|title }}

Nếu người dùng là "al hasib" thì nó sẽ trả về "Al Hasib"

hoặc là

{{ user.username|capfirst }}

Nếu người dùng là 'hasib' thì người cuối cùng sẽ trả về "Hasib"

Cả hai trông giống nhau nhưng có một số khác biệt.


0

Chỉ cần sử dụng {{myname | capfirst}} Trong Django mẫu lọc capfirst capatialize chữ cái đầu tiên của một chuỗi cho trước.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.