Django là một khung mạnh mẽ để tạo các ứng dụng web bằng Python. Các tính năng của nó bao gồm mô hình cơ sở dữ liệu, URL định tuyến, xác thực, quản lý người dùng, công cụ quản trị và ngôn ngữ mẫu. Bạn có thể soạn HTML có thể tái sử dụng thay đổi dựa trên dữ liệu bạn chuyển sang ngôn ngữ mẫu. Các mẫu Django sử dụng các thẻ và bộ lọc để xác định một ngôn ngữ nhỏ tương tự như Python—nhưng không phải Python
Bạn sẽ biết các mẫu Django thông qua các thẻ và bộ lọc bạn sử dụng để soạn HTML có thể tái sử dụng
Trong hướng dẫn này, bạn sẽ học cách
Viết, biên dịch và hiển thị mẫu Django
Sử dụng phím tắt
$ python manage.py runserver
6 trong dạng xem để nhanh chóng sử dụng các mẫu
Sử dụng thẻ mẫu cho điều kiện và vòng lặp trong mẫu của bạn
Tạo các mẫu có thể tái sử dụng với tính kế thừa và bao gồm
Sửa đổi cách trình bày dữ liệu của bạn thông qua các bộ lọc mẫu
Tiền thưởng miễn phí. cho bạn thấy các mẹo và thủ thuật cũng như những cạm bẫy phổ biến cần tránh khi xây dựng các ứng dụng web Python + Django
Tạo một dự án Django
Để thử nghiệm với các mẫu Django, bạn sẽ cần một dự án để bạn có thể thử nghiệm với mã. Bạn sẽ xây dựng cung điện phim. trang web phim nhỏ nhất, đơn giản nhất thế giới. Để có ví dụ chi tiết hơn về việc bắt đầu một dự án mới, bạn có thể đọc Bắt đầu với Django Phần 1. Xây dựng một ứng dụng danh mục đầu tư
Django không phải là một phần của thư viện Python tiêu chuẩn, vì vậy trước tiên bạn cần cài đặt nó. Khi giao dịch với thư viện của bên thứ ba, bạn nên sử dụng môi trường ảo. Để ôn lại về môi trường ảo, bạn có thể đọc qua Môi trường ảo Python. sơn lót
Khi bạn có một môi trường ảo, hãy chạy các lệnh sau để bắt đầu
0 đã đăng ký làm ứng dụng, giờ đây bạn có thể viết chế độ xem có chứa mẫuLoại bỏ các quảng cáo
Sẵn sàng sử dụng các mẫu Django
Django được tạo ra tại một tờ báo để giúp xây dựng các ứng dụng web một cách nhanh chóng. Một trong những mục tiêu của khung là tách các mối quan tâm của logic nghiệp vụ khỏi logic trình bày.
Các nhà thiết kế web, thay vì các lập trình viên Python, thường xuyên phát triển HTML trên báo. Vì điều này, các nhà phát triển đã quyết định không cho phép thực thi Python trong ngôn ngữ mẫu. Quyết định này đã đơn giản hóa những gì các nhà thiết kế cần biết và hộp cát mã của họ vì lý do bảo mật. Kết quả cuối cùng là một ngôn ngữ nhỏ riêng biệt. Cách tiếp cận này trái ngược với , trong đó mã được nhúng trực tiếp vào HTML
Biên dịch và kết xuất các mẫu Django
Các mẫu Django cho phép bạn tự động thay đổi nội dung đầu ra trong ngữ cảnh kết xuất. Bạn có thể coi các mẫu như một mẫu thư, trong đó nội dung của bức thư bao gồm những vị trí có thể chèn thông tin. Bạn có thể chạy quá trình kết xuất nhiều lần với các dữ liệu khác nhau và mỗi lần nhận được kết quả khác nhau
Django cung cấp các lớp
Citizen Kane was released in 1941
6 và
Citizen Kane was released in 1941
7 để thể hiện mẫu chuỗi được hiển thị và dữ liệu được sử dụng trong quá trình tạo. Lớp
Citizen Kane was released in 1941
7 là một trình bao bọc cho một
Citizen Kane was released in 1941
9 và cung cấp các cặp khóa-giá trị để điền vào nội dung được tạo. Kết quả của mẫu được hiển thị có thể là bất kỳ văn bản nào nhưng thường là HTML. Rốt cuộc, Django là một khung web
Đã đến lúc xây dựng mẫu đầu tiên của bạn. Để xem một hoạt động, trước tiên bạn cần có chế độ xem. Thêm đoạn mã sau vào
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
Trong chế độ xem này, bạn sẽ thấy một số khái niệm chính tạo nên ngôn ngữ tạo khuôn mẫu Django
1 đang trả về nội dung này dưới dạng HTML, nhưng vì chuỗi không chứa bất kỳ thẻ nào nên trình duyệt của bạn sẽ xử lý đối tượng này như thể đó là văn bản bên trong thẻ
5. Nó trả về HTML được định dạng xấu, nhưng hiện tại nó đủ tốt để chơi. Nếu mọi thứ suôn sẻ, bạn sẽ thấy mẫu của mình được hiển thị với dữ liệu từ ngữ cảnh của bạn
Citizen Kane was released in 1941
Mẫu của bạn đã được biên dịch và Django đã thay thế các biến
Trong một ứng dụng web, việc sử dụng các mẫu có nhiều khả năng nhất của bạn sẽ là xuất ra HTML—rất nhiều và rất nhiều HTML. Ngôn ngữ mẫu Django được xây dựng để đơn giản hóa quy trình này. Không giống như ví dụ trước, bạn thường không sử dụng các chuỗi mẫu trong chế độ xem của mình. Thay vào đó, bạn tải các mẫu từ các tệp khác
Để tải một mẫu từ đĩa, trước tiên bạn cần cho Django biết nơi tìm thấy nó. Bên trong
Làm thế nào để bạn quyết định nơi lưu trữ các mẫu của bạn? . Nếu không, hãy giữ các mẫu của bạn cùng nhau trong thư mục mẫu dự án. Xem bài học về cấu trúc thư mục kép của Django trong khóa học Bắt đầu với Django để biết thêm thông tin về cách cấu trúc các dự án Django của bạn
6 là cách hiển thị mẫu thông thường. Việc sử dụng trực tiếp đối tượng
Citizen Kane was released in 1941
6 chỉ được thực hiện trong một số trường hợp hiếm hoi, chẳng hạn như khi bạn muốn cung cấp sức mạnh của các mẫu cho người dùng của mình
Một ví dụ về việc sử dụng trực tiếp
Citizen Kane was released in 1941
6 có thể là khi cho phép người dùng của bạn nhập một mẫu thư. Một lá thư biểu mẫu có thể chứa các biến như người nhận thư. Bằng cách cho phép người dùng sử dụng mẫu Django, bạn có thể tận dụng cơ chế thay thế biến tích hợp để thay thế tên của người nhận
Chọn ngôn ngữ mẫu
Django hỗ trợ nhiều công cụ mẫu. Nó vận chuyển với hai
Ngôn ngữ mẫu Django. ngôn ngữ tạo khuôn mẫu Django gốc và ngôn ngữ bạn đang tìm hiểu trong hướng dẫn này
Jinja2. trước đây là thư viện chỉ dành cho bên thứ ba, hiện được đưa vào Django nhưng nằm ngoài phạm vi của hướng dẫn này
Bạn có thể thay đổi công cụ mẫu nào được sử dụng bằng cách chỉnh sửa giá trị
Phần còn lại của hướng dẫn này sẽ chỉ tập trung vào phụ trợ mẫu Django ban đầu để cung cấp cho bạn nền tảng vững chắc để tạo HTML trong các dự án Django của bạn
Loại bỏ các quảng cáo
Tìm hiểu về Mẫu, Thẻ và Bộ lọc Django
Cho đến nay, bạn đã thấy các mẫu chứa thay thế biến đơn giản. Ngôn ngữ mẫu Django đi sâu hơn thế nhiều. Bạn có quyền truy cập vào nhiều cấu trúc và điều khiển mà bạn đã quen sử dụng trong Python, ngoại trừ trong ngôn ngữ nhỏ của chính nó
Thẻ và bộ lọc mẫu Django
Ngôn ngữ mẫu Django có ba cách kiểm soát những gì được hiển thị. giá trị, thẻ và bộ lọc. Mọi thứ bạn đưa vào một mẫu không phải là một trong ba mẫu này sẽ được hiển thị như bạn đã viết. Trong hướng dẫn này, bạn sẽ xem qua ba phần chính của ngôn ngữ mẫu
Dữ liệu được giải thích, mà bạn ghi chú bằng dấu ngoặc kép,
Như bạn đã thấy trong phần trước, khi Django kết xuất một mẫu thành văn bản, nó sử dụng một từ điển đặc biệt có tên là
Citizen Kane was released in 1941
7. Bối cảnh là trạng thái mà mẫu được hiển thị. Ngoài việc chứa dữ liệu được giải thích sẽ được hiển thị bằng dấu ngoặc kép, nội dung của đối tượng
Citizen Kane was released in 1941
7 có thể được sử dụng để đưa ra các quyết định logic
Các thẻ giống như các từ khóa và chức năng của ngôn ngữ mẫu. Trong Python, các từ khóa và hàm cung cấp luồng điều khiển và các công cụ mà mã của bạn được xây dựng dựa trên. Tương tự, các thẻ tích hợp của Django cung cấp tính kế thừa, hoạt động có điều kiện, vòng lặp, nhận xét và quản lý văn bản. Ví dụ: thẻ
Phần còn lại của hướng dẫn này sẽ hướng dẫn bạn qua các thẻ và bộ lọc phổ biến, đưa ra các ví dụ về cách bạn sử dụng từng loại.
Kế thừa và bao gồm mẫu
Có rất nhiều bản tóm tắt bên trong HTML. Hầu hết các trang web có giao diện chung được chia sẻ bởi mọi trang. Mỗi trang được hiển thị thường lặp lại cùng một đầu trang và chân trang, bao gồm các biểu định kiểu giống nhau và thường bao gồm các tệp JavaScript giống nhau cho các số liệu và đo lường. Lặp lại điều này theo cách thủ công trên mọi trang có nghĩa là việc thực hiện thay đổi sẽ đòi hỏi nhiều công việc. Kế thừa mẫu và đưa vào để giải cứu
Có hai cách để kết hợp các phần của mẫu Django với nhau. Kế thừa hoạt động giống như kế thừa lớp trong Python, với các mẫu ghi đè các giá trị của cha mẹ chúng. Bao gồm đưa nội dung vào mẫu từ một mẫu khác. Điều này tương tự như chỉ thị
Phần khai báo này giống như một lớp cơ sở trong Lập trình hướng đối tượng. Bạn có thể tự sử dụng nó hoặc bạn có thể thiết lập các mẫu khác để kế thừa từ nó. Nếu bản mẫu này được hiển thị nguyên trạng, thì nội dung của các thẻ
38, và không có nội dung nào. Điều kỳ diệu xảy ra khi một mẫu khác kế thừa từ mẫu này. Trong mẫu con, bạn có thể tùy chọn ghi đè bất kỳ khối nào đã xác định. Một thực tế phổ biến là điền vào khối
43 mã hóa cứng tên của mẫu gốc. Đây là trường hợp phổ biến nhất, nhưng thay vào đó, mẫu gốc có thể được đặt tên theo biến ngữ cảnh. Thủ thuật này có thể cho phép bạn sử dụng cùng một trang con ở cả trạng thái đăng nhập và công khai, thay đổi mẫu gốc dựa trên tình huống
42 chỉ sử dụng một mức kế thừa, nhưng bạn không bị giới hạn ở mức đó một mình. Cháu có thể được thừa kế từ trẻ em, do đó được thừa kế từ cha mẹ. Bạn có thể có nhiều lớp nếu cần để sắp xếp đầu ra của mìnhLoại bỏ các quảng cáo
Khám phá các thẻ mẫu phổ biến
Bạn có thể tận dụng hơn 25 thẻ tích hợp sẵn mà Django 3. 2. 5 bao gồm. Các thẻ này giống như các từ khóa và chức năng của ngôn ngữ mẫu. Chúng cho phép bạn thực hiện logic có điều kiện, vòng lặp, kế thừa, thao tác văn bản, v.v.
84, vì vậy khối này về chất lượng âm thanh không được hiển thị
Các dòng 25 đến 31 hiển thị việc sử dụng các điều kiện với các toán tử so sánh Boolean. Bạn có thể sử dụng cùng loại toán tử mà bạn sử dụng trong Python bên trong các thẻ
Nếu bạn chạy máy chủ phát triển của mình và truy cập chế độ xem, bạn sẽ nhận thấy rằng các thẻ điều kiện đã hoạt động
Các thẻ có điều kiện cho phép bạn kiểm soát việc hiển thị các khối HTML với cùng sức mạnh như các phần điều kiện trong mã Python của bạn. Chơi xung quanh với dữ liệu trong chế độ xem
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
96. Đây là một biến cục bộ được Django chèn vào ngữ cảnh mẫu. Đối tượng có một số thành viên, mỗi thành viên chứa thông tin về lần lặp hiện tại của vòng lặp
99Số lần lặp còn lại trong vòng lặp (được lập chỉ mục 1)
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
00Số lần lặp còn lại trong vòng lặp (được lập chỉ mục 0)
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
01
{{movie}} was released in {{year}}
0 nếu đây là lần lặp đầu tiên
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
03
{{movie}} was released in {{year}}
0 nếu đây là lần lặp cuối cùng
Hãy kiểm tra thêm dòng bên trong khối vòng lặp
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
89 là một danh sách các bộ dữ liệu. Mỗi bộ chứa tên và năm của một bộ phim. Thẻ mẫu Django không cho phép sử dụng chỉ số con. Thay vì sử dụng dấu ngoặc vuông để truy cập một giá trị trong bộ dữ liệu hoặc danh sách như bạn làm trong Python, bạn sử dụng một số làm thuộc tính của đối tượng. Các giá trị của
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
07 và
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
Vòng lặp Django cũng hỗ trợ một thẻ đặc biệt có tên là
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
10. Mở lại
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
11 để lấy ví dụ về thẻ này
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
10
Thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
75 để đạt được kết quả tương tự. Trong trường hợp này, không có
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
18 được định nghĩa trong ngữ cảnh. Ngôn ngữ mẫu Django xử lý các giá trị bị thiếu là trống, do đó, nó hiển thị phần
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
2, kích hoạt máy chủ phát triển Django của bạn và truy cập vào
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
21 để xem kết quả
Có thêm một thẻ giống như vòng lặp được hỗ trợ.
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
22. Thẻ này nhận một loạt đối số và trả về lần lượt từng đối số mỗi khi nó được gọi
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
3
Khi
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
22 hết đối số, nó sẽ quay lại từ đầu. Cách sử dụng phổ biến nhất của điều này là thêm các sọc vào bảng, xen kẽ giá trị kiểu của mỗi hàng
86, nhưng cách tiếp cận đó sẽ yêu cầu nhiều mã hơnLoại bỏ các quảng cáo
Bình luận
Mặc dù bạn có thể viết nhận xét bằng HTML bằng cách sử dụng
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
25, phản hồi được tải xuống trình duyệt của người dùng bao gồm những nhận xét đó. Django bao gồm một thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
26, có nội dung bị loại bỏ hoàn toàn
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
4
Bạn cũng có thể đưa tham số chuỗi vào thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
26 để đóng vai trò ghi chú. Nó có vẻ hơi lạ, nhưng nó rất hữu ích nếu bạn đang bình luận mã. Bạn sử dụng khối để nhận xét mã và sau đó ghi chú để nhắc nhở bản thân tại sao bạn lại nhận xét mã đó
Ký tự đặc biệt
Theo mặc định, trình kết xuất mẫu Django tự động thoát mọi biến mà nó kết xuất. Điều này cố gắng ngăn không cho HTML của bạn bị hỏng nếu một chuỗi chứa ký tự đặc biệt đối với HTML, chẳng hạn như dấu ngoặc nhọn (
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
28,
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
29) được sử dụng trong các thẻ HTML. Thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
30 cho phép bạn kiểm soát hành vi này
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
5
Thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
30 nhận một tham số duy nhất là
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
32 hoặc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
33, lần lượt bật hoặc tắt cơ chế thoát. Xem xét mẫu sau
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
6
Nếu
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
34 chứa
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
35, nội dung được hiển thị sẽ có hai phiên bản của chuỗi
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
36 thay đổi các ký tự đặc biệt HTML để chúng hiển thị như trong chuỗi. Ngược lại, với
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
37, thẻ in đậm được chuyển qua trình duyệt
Tất cả các ngôn ngữ sử dụng các ký tự đặc biệt đều cần có cách sử dụng trực tiếp các ký tự đặc biệt đó. Nếu bạn muốn sử dụng các ký tự biểu thị thẻ, bạn có thể bọc chúng trong thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
38
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
7
Nhiều khung JavaScript có ngôn ngữ tạo khuôn mẫu riêng. Định dạng dấu ngoặc kép cho các biến hoặc thẻ khá phổ biến. Nếu bạn cần bao gồm các mẫu JavaScript bên trong mẫu Django của mình, việc gói chúng trong thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
38 sẽ khiến trình kết xuất mẫu của Django bỏ qua chúng, để nguyên chúng cho JavaScript
Ngày và Giờ
Bạn thường cần hiển thị thông tin ngày giờ trên trang web. Thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
40 trong ngôn ngữ mẫu Django cung cấp cho bạn ngày giờ hiện tại. Nó nhận một tham số chuỗi chỉ định định dạng của ngày giờ để hiển thị. Vì các lý do lịch sử, chuỗi định dạng dựa trên hàm
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
41 của PHP thay vì hàm
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
42 của Python. Một danh sách các ký tự định dạng có thể có sẵn trong
Việc sử dụng phổ biến thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
40 đang hiển thị năm hiện tại như một phần của tuyên bố bản quyền
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
8
Ví dụ trên sẽ hiển thị thông báo bản quyền với các năm từ 2012 đến hiện tại
Loại bỏ các quảng cáo
URL
Chế độ xem và định tuyến của Django có cách tích hợp để đặt tên cho URL của bạn. URL mã hóa cứng là cách làm không tốt. Nếu có gì đó thay đổi, thì bạn phải tìm kiếm tất cả những lần bạn đã sử dụng nó trong mã của mình. Thay vì giải quyết một URL trong chế độ xem và chuyển nó vào ngữ cảnh, bạn có thể sử dụng thẻ
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
44
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
9
Đối số của
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
44 là any , giống như cách mà Django hoạt động. Nó tùy ý nhận các đối số vị trí hoặc được đặt tên cho chế độ xem cơ bản đang được tham chiếu
Khám phá các bộ lọc mẫu chính
Giống như bạn đã học trước đó, thẻ mẫu Django là từ khóa và chức năng của ngôn ngữ mẫu. Bộ lọc giống như các hàm nhỏ sửa đổi dữ liệu tại chỗ trước khi Django hiển thị dữ liệu đó
Bạn có thể đặt bộ lọc bên trong dấu ngoặc kép bằng cách thêm dấu gạch ngang (_______10_______21) và tên bộ lọc sau biến. Điều này được lấy cảm hứng từ cách bạn có thể nối các lệnh với nhau trong Unix shell
Bây giờ, bạn sẽ xem xét một số bộ lọc phổ biến được sử dụng với chuỗi, danh sách, ngày và giờ, cùng với các ví dụ cho thấy cách sử dụng chúng
Bộ lọc chuỗi
Bộ lọc có thể hoạt động trên tất cả các loại dữ liệu. Nhiều trong số chúng tương ứng trực tiếp với các hàm Python có cùng mục đích. Bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
48 giống với phương thức
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
49 trong Python. Sử dụng nó thay đổi nội dung của một biến thành chữ hoa. Hãy dùng thử bằng cách sửa đổi
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
48 vào biến
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
Với sự thay đổi ở trên, mỗi tựa phim trong danh sách sẽ được đặt trong hộp đựng. Không ngạc nhiên, cũng có một bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
53 tương ứng
Bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
54 thêm phần đệm vào cả hai bên của chuỗi. Phần đệm là một ký tự khoảng trắng, vì vậy tùy thuộc vào phông chữ của bạn và thẻ nào bao bọc nó, bộ lọc này có thể có tác dụng hạn chế
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
55 chứa
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
Nếu bạn cần xóa ký tự khỏi chuỗi, bạn có thể sử dụng bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
57. Đối số của
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
57 với
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
55 của
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
57 không phải là danh sách các ký tự bạn muốn cắt mà là chuỗi bạn muốn cắt. Thay vào đó, nếu bạn cố gắng cắt giảm giá trị này bằng
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
63, sẽ không có gì xảy ra. Không có chuỗi con
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
63 trong
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
61Loại bỏ các quảng cáo
Danh sách bộ lọc
Bộ lọc có thể hoạt động trên các giá trị giống như danh sách. Bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
66 và
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
67 lần lượt trả về mục đầu tiên và mục cuối cùng trong một lần lặp
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
68 chứa
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
69, thì ví dụ này cho kết quả là
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
70. Sử dụng bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
67 sẽ cho kết quả là
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
72
Ngoài việc sử dụng bộ lọc để truy cập các phần của danh sách, bạn có thể sử dụng chúng để lấy dữ liệu từ danh sách. Bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
73 tương tự như phương thức
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
74 của Python. Nó trả về một chuỗi bao gồm từ các phần của danh sách
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
75) để truyền tham số cho bộ lọc. Tham gia danh sách
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
68 bằng dấu phẩy làm tham số trả về một chuỗi chứa danh sách được phân tách bằng dấu phẩy.
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
77
Để tìm độ dài của danh sách, bạn sử dụng bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
78. Điều này có thể đặc biệt hữu ích khi kết hợp với các bộ lọc khác. Bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
79 thêm một
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
80 vào cuối một từ khi xử lý nhiều mục. Hãy thử thêm dòng sau vào
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
89. Bộ thứ hai đang làm điều gì đó thông minh. chuỗi bộ lọc. Bộ lọc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
79 lấy một số. Nếu số là _______17_______85 hoặc lớn hơn, nó sẽ trả về _______17_______80. Bằng cách sử dụng
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
78 và sau đó là
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
79
Bạn sẽ làm gì nếu việc thêm
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
80,
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
79 nối thêm
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
94, trả về
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
95. Đối với những từ có đuôi khác nhau, bạn có thể chỉ định cả đuôi đơn và số nhiều
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
79 thêm chuỗi được chỉ định trước dấu phẩy nếu kết quả là số ít và thêm chuỗi được chỉ định sau dấu phẩy nếu kết quả là số nhiều. Bằng cách này, bạn nhận được chính xác
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
97 hoặc
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
98
Bộ lọc ngày và giờ
Việc trình bày ngày hoặc giờ phải cụ thể theo ngôn ngữ của người dùng. Trong mã của bạn, bạn chỉ nên sử dụng đối tượng
1# moviefacts/views.py 2fromdjango.httpimportHttpResponse 3fromdjango.templateimportContext,Template 4 5defcitizen_kane(request): 6content="""{{movie}} was released in {{year}}""" 7template=Template(content) 8context=Context({"movie":"Citizen Kane","year":1941}) 910result=template.render(context)11returnHttpResponse(result)
40 mà bạn đã thấy trước đó trong hướng dẫn. Giống như thẻ đó, các tham số cho bộ lọc
03 theo định dạng năm-tháng-ngày theo tiêu chuẩn ISO 8601. Đối với Citizen Kane, đó sẽ là 1941-09-05 (ngày 5 tháng 9 năm 1941) để phát hành rộng rãi. Mặc dù nó được gọi là bộ lọc
Một định dạng phổ biến giúp thời gian dễ đọc hơn là hiển thị thời gian đã trôi qua kể từ một sự kiện. Bạn thấy điều này trong nhiều ứng dụng webmail hiển thị thông tin như Bạn đã nhận được email “3 ngày trước”. Bộ lọc Django
Ví dụ này cho biết lượng thời gian đã trôi qua kể từ ngày phát hành của một bộ phim. Theo mặc định, bộ lọc này tính toán thời gian đã trôi qua kể từ bây giờ. Ngoài ra, bạn có thể thêm một tham số vào
13. Thay vì nhìn ngược về một ngày, nó nhìn về phía trước. Bạn có thể sử dụng điều này để hiển thị đếm ngược đến một hội nghị hoặc một sự kiện tương tự
13 đều tính toán sự khác biệt về thời gian theo máy chủ khi Django hiển thị mẫu. Việc tính toán được thực hiện bằng cách sử dụng thông tin múi giờ trong
3. Điều này có thể tạo ra kết quả lạ nếu máy chủ của bạn không ở UTC và cấu hình Django của bạn đang sử dụng mặc định UTC. Đảm bảo hai cấu hình này khớp nhau, nếu không phép tính chênh lệch múi giờ của bạn sẽ không chính xácLoại bỏ các quảng cáo
Thư viện bộ lọc và thẻ của bên thứ ba
Ngoài các thẻ và bộ lọc mẫu Django tích hợp sẵn, bạn cũng có thể viết bộ lọc của riêng mình. Bạn có thể tìm thấy các thư viện bên thứ ba hữu ích bao gồm các thẻ và bộ lọc tùy chỉnh. Một thư viện như vậy là
Bây giờ Django đã biết về ứng dụng, nhưng bạn chưa thể sử dụng các thẻ. Trước khi bạn có thể sử dụng chúng, trước tiên bạn cần tải chúng vào bên trong mẫu. Bạn làm điều này với thẻ
Các thẻ và bộ lọc mẫu Django cung cấp cho bạn một cách mạnh mẽ để xây dựng đầu ra HTML theo kiểu có thể tái sử dụng. Các mẫu được xác định bằng ngôn ngữ riêng của chúng để tách logic nghiệp vụ khỏi logic hiển thị. Các thẻ giống như các từ khóa và chức năng của ngôn ngữ, trong khi các bộ lọc cho phép bạn sửa đổi dữ liệu hiện có trước khi hiển thị nó
Tải và sử dụng thẻ và bộ lọc mẫu tùy chỉnh từ thư viện của bên thứ ba
Bạn có thể tìm thêm thông tin chung về Django trong tài liệu xuất sắc. Trong cùng một tài liệu, bạn cũng có thể tìm thêm thông tin cụ thể về thẻ mẫu và bộ lọc
Nếu bạn muốn làm theo một số hướng dẫn về Django trên Real Python, bạn có thể xem Bắt đầu với Django Phần 1. Xây dựng Ứng dụng danh mục đầu tư, Lộ trình học tập Django dành cho phát triển web và danh sách các hướng dẫn Django có sẵn
Và từ thích hợp cuối cùng từ hướng dẫn cung điện phim sẽ phải là.
Đánh dấu là đã hoàn thành
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Christopher Trudeau
Christopher có niềm đam mê với ngôn ngữ Python và viết cho Real Python. Anh ấy là một nhà tư vấn giúp tư vấn cho các tổ chức về cách cải thiện đội ngũ kỹ thuật của họ
» Thông tin thêm về Christopher
Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Bartosz
Sadie
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Chuyên gia Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ Email
Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi
Làm cách nào để sử dụng thẻ mẫu Django trong JavaScript?
Thẻ này có thể được sử dụng theo hai cách. .
{% mở rộng "cơ sở. html" %} (có dấu ngoặc kép) sử dụng giá trị bằng chữ "cơ sở. html" làm tên của mẫu gốc để mở rộng
{% mở rộng biến %} sử dụng giá trị của biến. Nếu biến đánh giá thành một chuỗi, Django sẽ sử dụng chuỗi đó làm tên của mẫu gốc
Chúng tôi có thể sử dụng JavaScript trong mẫu Django không?