Sử dụng thẻ mẫu django trong javascript

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

 1$ python -m pip install django==3.2.5
 2$ django-admin startproject moviepalace
 3$ cd moviepalace
 4$ python manage.py startapp moviefacts

Dòng 1 cài đặt Django vào môi trường ảo của bạn bằng cách sử dụng

$ python manage.py runserver
7. Ở dòng 2, lệnh
$ python manage.py runserver
8 tạo một dự án Django mới có tên là
$ python manage.py runserver
9. Một dự án Django bao gồm các ứng dụng, nơi chứa mã của bạn. Lệnh thứ tư tạo một ứng dụng có tên
Citizen Kane was released in 1941
0

Bạn gần như đã sẵn sàng để đi. Bước cuối cùng là nói với Django về ứng dụng

Citizen Kane was released in 1941
0 mới tạo của bạn. Bạn thực hiện việc này bằng cách chỉnh sửa tệp
Citizen Kane was released in 1941
2 và thêm
Citizen Kane was released in 1941
3 vào danh sách
Citizen Kane was released in 1941
4

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]

Với

Citizen Kane was released in 1941
0 đã đăng ký làm ứng dụng, giờ đây bạn có thể viết chế độ xem có chứa mẫu

Loạ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

 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
0

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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

  • Dòng 6 chứa các tham chiếu đến
     1TEMPLATES = [
     2    {
     3        "BACKEND": "django.template.backends.django.DjangoTemplates",
     4        "DIRS": [
     5            BASE_DIR / "templates",
     6        ],
     7        "APP_DIRS": True,
     8        "OPTIONS": {
     9            "context_processors": [
    10                "django.template.context_processors.debug",
    11                "django.template.context_processors.request",
    12                "django.contrib.auth.context_processors.auth",
    13                "django.contrib.messages.context_processors.messages",
    14            ],
    15        },
    
    1 và
     1TEMPLATES = [
     2    {
     3        "BACKEND": "django.template.backends.django.DjangoTemplates",
     4        "DIRS": [
     5            BASE_DIR / "templates",
     6        ],
     7        "APP_DIRS": True,
     8        "OPTIONS": {
     9            "context_processors": [
    10                "django.template.context_processors.debug",
    11                "django.template.context_processors.request",
    12                "django.contrib.auth.context_processors.auth",
    13                "django.contrib.messages.context_processors.messages",
    14            ],
    15        },
    
    2. Điều này tương tự như chuỗi f Python. Dấu ngoặc kép hoặc dấu ngoặc nhọn, cho biết các mục mà Django thay thế khi hiển thị mẫu
  • Dòng 7 khởi tạo một đối tượng
    Citizen Kane was released in 1941
    
    6 bằng cách chuyển vào chuỗi chỉ định mẫu
  • Dòng 8 tạo một đối tượng
    Citizen Kane was released in 1941
    
    7 bằng cách điền vào nó một từ điển. Đối tượng
    Citizen Kane was released in 1941
    
    7 chứa tất cả dữ liệu có sẵn cho mẫu khi Django hiển thị nó. Mẫu chứa hai mục để thay thế.
     1TEMPLATES = [
     2    {
     3        "BACKEND": "django.template.backends.django.DjangoTemplates",
     4        "DIRS": [
     5            BASE_DIR / "templates",
     6        ],
     7        "APP_DIRS": True,
     8        "OPTIONS": {
     9            "context_processors": [
    10                "django.template.context_processors.debug",
    11                "django.template.context_processors.request",
    12                "django.contrib.auth.context_processors.auth",
    13                "django.contrib.messages.context_processors.messages",
    14            ],
    15        },
    
    6 với
     1TEMPLATES = [
     2    {
     3        "BACKEND": "django.template.backends.django.DjangoTemplates",
     4        "DIRS": [
     5            BASE_DIR / "templates",
     6        ],
     7        "APP_DIRS": True,
     8        "OPTIONS": {
     9            "context_processors": [
    10                "django.template.context_processors.debug",
    11                "django.template.context_processors.request",
    12                "django.contrib.auth.context_processors.auth",
    13                "django.contrib.messages.context_processors.messages",
    14            ],
    15        },
    
    7 và
     1TEMPLATES = [
     2    {
     3        "BACKEND": "django.template.backends.django.DjangoTemplates",
     4        "DIRS": [
     5            BASE_DIR / "templates",
     6        ],
     7        "APP_DIRS": True,
     8        "OPTIONS": {
     9            "context_processors": [
    10                "django.template.context_processors.debug",
    11                "django.template.context_processors.request",
    12                "django.contrib.auth.context_processors.auth",
    13                "django.contrib.messages.context_processors.messages",
    14            ],
    15        },
    
    8 với
     1TEMPLATES = [
     2    {
     3        "BACKEND": "django.template.backends.django.DjangoTemplates",
     4        "DIRS": [
     5            BASE_DIR / "templates",
     6        ],
     7        "APP_DIRS": True,
     8        "OPTIONS": {
     9            "context_processors": [
    10                "django.template.context_processors.debug",
    11                "django.template.context_processors.request",
    12                "django.contrib.auth.context_processors.auth",
    13                "django.contrib.messages.context_processors.messages",
    14            ],
    15        },
    
    9
  • Dòng 10 có cuộc gọi đến phương thức
    TEMPLATES = [
        {
            "BACKEND": "django.template.backends.django.DjangoTemplates",
            "DIRS": [os.path.join(BASE_DIR, "templates"), ],
            "APP_DIRS": True,
            "OPTIONS": {
                "context_processors": [
                    "django.template.context_processors.debug",
                    "django.template.context_processors.request",
                    "django.contrib.auth.context_processors.auth",
                    "django.contrib.messages.context_processors.messages",
                ],
            },
        },
    ]
    
    0 tạo ra kết quả
  • Dòng 11 trả về nội dung được hiển thị được bao bọc trong một đối tượng
    TEMPLATES = [
        {
            "BACKEND": "django.template.backends.django.DjangoTemplates",
            "DIRS": [os.path.join(BASE_DIR, "templates"), ],
            "APP_DIRS": True,
            "OPTIONS": {
                "context_processors": [
                    "django.template.context_processors.debug",
                    "django.template.context_processors.request",
                    "django.contrib.auth.context_processors.auth",
                    "django.contrib.messages.context_processors.messages",
                ],
            },
        },
    ]
    
    1

Để kiểm tra điều này, bạn cần cung cấp chế độ xem này trong trình duyệt, vì vậy bạn sẽ cần thêm tuyến đường. Sửa đổi

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
2 như sau

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]

Đảm bảo rằng bạn đang sử dụng môi trường ảo mà bạn đã cài đặt Django, sau đó chạy máy chủ phát triển Django để xem kết quả

$ python manage.py runserver

Chạy chế độ xem của bạn bằng cách truy cập

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
3

Đối tượng

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
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ẻ
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
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

 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
1 và
 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
2 bằng
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
8 và
 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
9

Định cấu hình Django để tải mẫu tệp

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

Citizen Kane was released in 1941
2, sửa đổi giá trị
$ pwd
/home/realpython/moviepalace
$ mkdir templates
1 trong
$ pwd
/home/realpython/moviepalace
$ mkdir templates
2

 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },

Trong tệp

$ pwd
/home/realpython/moviepalace
$ mkdir templates
3 mặc định mà lệnh
$ python manage.py runserver
8 đã tạo, danh sách
$ pwd
/home/realpython/moviepalace
$ mkdir templates
5 trống. Django bây giờ sẽ tìm kiếm các mẫu trong một thư mục có tên
$ pwd
/home/realpython/moviepalace
$ mkdir templates
6. Lưu ý rằng Django sử dụng cấu trúc thư mục đôi cho cấu hình của chính nó. Ví dụ:
$ pwd
/home/realpython/moviepalace
$ mkdir templates
3 được tìm thấy trong
$ pwd
/home/realpython/moviepalace
$ mkdir templates
8. Thư mục dành cho các mẫu phải nằm trong thư mục gốc của dự án, không phải trong thư mục cấu hình

Khi

$ pwd
/home/realpython/moviepalace
$ mkdir templates
9 trên dòng 7 là
{{movie}} was released in {{year}}
0, Django cũng sẽ tìm các mẫu trong thư mục con của ứng dụng. Django mong đợi các mẫu ứng dụng nằm trong một thư mục có tên
{{movie}} was released in {{year}}
1 trong thư mục của ứng dụng

Trước Django 3. 1Hiển thị/Ẩn

Trong Django 3. 1, tham số

{{movie}} was released in {{year}}
2 trong tệp
$ pwd
/home/realpython/moviepalace
$ mkdir templates
3 đã thay đổi từ sử dụng
{{movie}} was released in {{year}}
4 thành
{{movie}} was released in {{year}}
5

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

Nếu bạn đang sử dụng Django 3. 0 hoặc sớm hơn, giá trị

$ pwd
/home/realpython/moviepalace
$ mkdir templates
5 sẽ cần sử dụng
{{movie}} was released in {{year}}
4 thay thế

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

Sau khi thực hiện thay đổi đối với tệp

Citizen Kane was released in 1941
2, đừng quên tạo thư mục
{{movie}} was released in {{year}}
1

$ pwd
/home/realpython/moviepalace
$ mkdir templates

Với cấu hình đã hoàn tất và thư mục được tạo, giờ bạn đã sẵn sàng tải mẫu từ tệp

Loại bỏ các quảng cáo

Đang tải các mẫu Django từ tệp

Hãy xây dựng lại trải nghiệm Citizen Kane bằng tệp. Tạo

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
00 và thêm chuỗi mẫu được sử dụng trong chế độ xem
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
01 của bạn

{{movie}} was released in {{year}}

Bạn có thể viết mã để tải tệp dưới dạng chuỗi, xây dựng đối tượng

Citizen Kane was released in 1941
6 và thực hiện tương tự như bạn đã làm trong chế độ xem
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
01 hoặc bạn có thể sử dụng phím tắt
$ python manage.py runserver
6 để thực hiện tất cả những việc đó cho bạn. Thêm phần sau vào tệp
 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
0 của bạn

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
0

Với chế độ xem mới, đừng quên thêm tuyến đường đến

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
2

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
1

Truy cập

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
07 sẽ tạo ra kết quả tương tự như ví dụ về Citizen Kane

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
2

Phím tắt

$ python manage.py runserver
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ị

$ pwd
/home/realpython/moviepalace
$ mkdir templates
2 trong
Citizen Kane was released in 1941
2

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
3

Cài đặt

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
13 trên dòng 3 là nơi bạn chỉ định công cụ kết xuất của mình. Bạn có thể chọn công cụ mẫu Django hoặc công cụ Jinja2 bằng cách thay đổi
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
13 thành tên mô-đun đường dẫn chấm của công cụ

  • 33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    15
  • 33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    16

Công cụ mẫu của bên thứ ba cũng có sẵn. Sử dụng chúng yêu cầu cài đặt thư viện thông qua

$ python manage.py runserver
7 và thay đổi giá trị
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
13 thành tên đường dẫn chấm của công cụ

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

  1. Dữ liệu được giải thích, mà bạn ghi chú bằng dấu ngoặc kép,
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    19
  2. Các thẻ mà bạn lưu ý bằng dấu ngoặc nhọn và dấu phần trăm,
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    20
  3. Các bộ lọc sửa đổi dữ liệu được giải thích và bạn áp dụng với toán tử đường ống (
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    21), như trong
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    22

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ẻ

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
25 được thay thế bằng văn bản lorem ipsum mẫu khi được hiển thị

Bộ lọc Django hoạt động bên trong dấu ngoặc kép và cho phép bạn thay đổi cách trình bày dữ liệu bạn hiển thị. Ví dụ: bộ lọc

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
26 định dạng đối tượng ngày-giờ tương tự như cách hoạt động trong Python. Nếu từ điển
Citizen Kane was released in 1941
7 chứa một đối tượng
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
29 có tên là
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
30, thì
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
31 áp dụng bộ lọc
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
26 thành
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
30, trả về năm

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ị

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
34 trong ngôn ngữ lập trình C

Để xem chúng hoạt động, hãy tạo

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
35

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
4

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ẻ

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
36 sẽ hiển thị nguyên trạng. Điều này cung cấp một mặc định hữu ích trong trường hợp đứa trẻ không ghi đè khối

Trong

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
37, có một tiêu đề ghi là
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
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
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
39 nội dung cho một trang trong khi để HTML soạn sẵn bên trong tệp cơ sở này. Tạo một mẫu kế thừa từ
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
37 được gọi là
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
41

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
5

Tệp

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
42 cho thấy hai điều. kế thừa và hòa nhập. Bạn kế thừa tệp mẹ bằng cách sử dụng thẻ
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
43. Ở đây,
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
42 kế thừa từ
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
37. Django hiển thị đầy đủ tệp
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
37, ngoại trừ khi tệp con
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
42 ghi đè một khối. Ví dụ: phần
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
39 trong
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
42 ghi đè khối có cùng tên trong
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
37

Bên trong phần

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
51, một biến đặc biệt được xác định.
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
52. Biến này chứa bất cứ thứ gì trong khối cha. Ở dòng 5, khối gốc mang tiêu đề
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
38, trong khi
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
42 thêm
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
55 vào khối ở dòng 6

Ngoài tính kế thừa, bạn cũng có thể thực hiện gộp. Ở dòng 11, thẻ

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
56 chèn nội dung của
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
57. Điều này cho phép bạn sử dụng lại các đoạn mã HTML. Ở đây, nó đang sử dụng lại mẫu được xác định ban đầu cho chế độ xem
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
58

Để xem tất cả những điều này đang hoạt động, bạn sẽ cần một chế độ xem mới để hiển thị chúng. Tạo phần sau trong

 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
0

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
6

Chế độ xem này hầu như giống với

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
58, ngoại trừ nó hiển thị
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
42 và chuyển dữ liệu phim phù hợp. Cập nhật tệp
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
2 của bạn với lộ trình cho chế độ xem
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
63 và sau đó truy cập trang

Sử dụng thẻ mẫu django trong javascript

Bạn đã ghi đè tiêu đề, bạn đã bao gồm

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
57 và Django đã hiển thị tất cả bằng dữ liệu phim Chim ưng tiếng Malta

Bên trong

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
42, thẻ
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
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

Mẫu

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
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ình

Loạ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.

Mã có điều kiện

Trong Python, bạn sử dụng các từ khóa

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
68,
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
69 và
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
70 để thực thi mã có điều kiện. Trong các mẫu Django, bạn sử dụng các thẻ để thực hiện điều tương tự

Để xem các thẻ này đang hoạt động, bạn sẽ cần một chế độ xem có nhiều dữ liệu hơn một chút. Chỉnh sửa tệp

 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
0 của bạn và thêm chức năng sau

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
7

Thêm tuyến đường tương ứng cho

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
72 đến
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
2, sau đó tạo
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
74

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
8

Thẻ

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
75 hoạt động giống như từ khóa
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
68 của Python. Nếu điều kiện được kiểm tra là
{{movie}} was released in {{year}}
0, thì khối được hiển thị

  • Dòng 6 đến 7 cho thấy việc sử dụng điều kiện if nội tuyến, với giá trị
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    78 phủ định với từ khóa
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    79
  • Dòng 11 đến 15 hiển thị việc sử dụng điều kiện if nhiều dòng. Khối điều kiện này cũng chứa mệnh đề
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    80. Tuy nhiên, không giống như viết các câu lệnh
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    68 trong Python, đừng quên thẻ đóng
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    82
  • Dòng 19 kiểm tra biến
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    83 mà Django sẽ không tìm thấy. Một biến không có trong ngữ cảnh được coi là
    33INSTALLED_APPS = [
    34    "django.contrib.admin",
    35    "django.contrib.auth",
    36    "django.contrib.contenttypes",
    37    "django.contrib.sessions",
    38    "django.contrib.messages",
    39    "django.contrib.staticfiles",
    40    "moviefacts",
    41]
    
    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

Sử dụng thẻ mẫu django trong javascript

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

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
85 và xem điều đó thay đổi đầu ra của các khối điều kiện như thế nào

vòng lặp

Có một thẻ mẫu Django duy nhất để lặp.

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
86. Nó sử dụng một cú pháp tương tự như câu lệnh
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
87 của Python và cung cấp một số biến tích hợp cung cấp thông tin về vị trí của bạn trong lần lặp

Các lượt xem phim cho đến nay có rất ít dữ liệu trong đó không có gì để lặp lại. Để chơi với các vòng lặp, bạn sẽ muốn thêm một chế độ xem khác vào

 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
0

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
9

Chế độ xem này có một biến ngữ cảnh được gọi là

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
89, là một danh sách. Mẫu bạn sẽ xây dựng sẽ sử dụng các thẻ vòng lặp để lặp lại danh sách này. Tạo
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
90 như sau

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
0

Các dòng 7 đến 11 chứa một khối

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
86, tương tự như từ khóa
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
87 trong Python. Khối lặp lại trên
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
89 và gán một biến cục bộ có tên là
 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
1 trong mỗi vòng lặp. Bên trong khối, bạn viết HTML tận dụng các cặp dấu ngoặc kép để hiển thị nội dung bên trong các thẻ
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
95

Các dòng 8 đến 10 được lặp lại một lần cho mỗi lần lặp. Vòng lặp đang sử dụng một đối tượng đặc biệt có tên là

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
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

BiếnMô tả

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
số chỉ mục dựa trên 971 của lần lặp
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
980 số chỉ mục dựa trên số của lần lặp
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
01
{{movie}} was released in {{year}}
0 nếu đây là lần lặp đầu tiên
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
1

Nội dung của

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
07 và
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
08 là giá trị thứ nhất và thứ hai của bộ dữ liệu
 1TEMPLATES = [
 2    {
 3        "BACKEND": "django.template.backends.django.DjangoTemplates",
 4        "DIRS": [
 5            BASE_DIR / "templates",
 6        ],
 7        "APP_DIRS": True,
 8        "OPTIONS": {
 9            "context_processors": [
10                "django.template.context_processors.debug",
11                "django.template.context_processors.request",
12                "django.contrib.auth.context_processors.auth",
13                "django.contrib.messages.context_processors.messages",
14            ],
15        },
1

Vòng lặp Django cũng hỗ trợ một thẻ đặc biệt có tên là

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
10. Mở lại
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
11 để lấy ví dụ về thẻ này

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
2

Thẻ này giống như một mệnh đề

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
70. Nếu không có gì để lặp lại trong thẻ
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
86, thay vào đó, Django sẽ chạy khối
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
10

Thẻ

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
10 thuận tiện hơn là bọc khối
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
86 trong khối
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
75 để đạt được kết quả tương tự. Trong trường hợp này, không có
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
10 của khối

Thêm một tuyến đường vào

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates"), ],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
21 để xem kết quả

Sử dụng thẻ mẫu django trong javascript

Có thêm một thẻ giống như vòng lặp được hỗ trợ.

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
3

Khi

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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

Sử dụng thẻ mẫu django trong javascript

Bạn có thể đạt được kết quả tương tự với thẻ

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
86, nhưng cách tiếp cận đó sẽ yêu cầu nhiều mã hơn

Loạ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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
26, có nội dung bị loại bỏ hoàn toàn

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
4

Bạn cũng có thể đưa tham số chuỗi vào thẻ

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
28,
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
29) được sử dụng trong các thẻ HTML. Thẻ
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
30 cho phép bạn kiểm soát hành vi này

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
5

Thẻ

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
30 nhận một tham số duy nhất là
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
32 hoặc
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
6

Nếu

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
34 chứa
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
35, nội dung được hiển thị sẽ có hai phiên bản của chuỗi

Sử dụng thẻ mẫu django trong javascript

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
38

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
41 của PHP thay vì hàm
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
44

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
9

Đối số của

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
48 giống với phương thức
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
90, thêm bộ lọc
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
48 vào biến
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
52

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
0

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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
53 tương ứng

Bộ lọc

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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ế

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
1

Nếu

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
55 chứa
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
56, ví dụ này dẫn đến bốn khoảng trắng ở mỗi bên

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
2

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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
57. Đối số của
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
57 là chuỗi con cần xóa

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
3

Hãy xem điều gì sẽ xảy ra khi bạn sử dụng bộ lọc

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
57 với
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
55 của
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
61

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
4

Lưu ý rằng đối số của

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
63, sẽ không có gì xảy ra. Không có chuỗi con
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
63 trong
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
61

Loạ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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
66 và
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
5

Nếu

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
68 chứa
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
69, thì ví dụ này cho kết quả là
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
70. Sử dụng bộ lọc
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
67 sẽ cho kết quả là
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
73 tương tự như phương thức
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
6

Bạn sử dụng dấu hai chấm (

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
75) để truyền tham số cho bộ lọc. Tham gia danh sách
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
77

Để tìm độ dài của danh sách, bạn sử dụng bộ lọc

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
79 thêm một
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
90 ngay bên dưới tiêu đề
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
82

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
7

Django thay thế bộ dấu ngoặc kép đầu tiên bằng độ dài của danh sách

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
78 và sau đó là
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
79, bạn đang chuyển độ dài của
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
89 sang
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
79

Bạn sẽ làm gì nếu việc thêm

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
80 không phải là cách bạn tạo số nhiều cho từ đó?

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
8

Trong ví dụ này, thay vì nối thêm

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
80,
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
79 nối thêm
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
94, trả về
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
9

Trong ví dụ trên,

 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(result)
97 hoặc
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
29 của Python. Bạn nên để định dạng của đối tượng này cho thời gian kết xuất. Có các bộ lọc để giúp bạn với điều này

Bộ lọc

33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
26 nhận tham số tương tự như thẻ
 1# moviefacts/views.py
 2from django.http import HttpResponse
 3from django.template import Context, Template
 4
 5def citizen_kane(request):
 6    content = """{{movie}} was released in {{year}}"""
 7    template = Template(content)
 8    context = Context({"movie": "Citizen Kane", "year": 1941})
 9
10    result = template.render(context)
11    return HttpResponse(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
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
26 chỉ định định dạng trình bày của ngày

$ python manage.py runserver
0

Ví dụ này sẽ trình bày nội dung của

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
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
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
26, nhưng nó cũng hỗ trợ thời gian, giả sử nó hoạt động với đối tượng
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
29 thay vì chỉ đối tượng
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
26

Nếu bạn chỉ quan tâm đến thời gian, thì cũng có một bộ lọc cho điều đó. Bộ lọc

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
07 sử dụng một tập hợp con các tham số cấu hình cho
33INSTALLED_APPS = [
34    "django.contrib.admin",
35    "django.contrib.auth",
36    "django.contrib.contenttypes",
37    "django.contrib.sessions",
38    "django.contrib.messages",
39    "django.contrib.staticfiles",
40    "moviefacts",
41]
26, chỉ những tham số liên quan đến thời gian. Cách sử dụng cũng tương tự

$ python manage.py runserver
1

Ví dụ này hiển thị thời gian hiển thị ở định dạng đồng hồ 24 giờ. cho 9. 30 giờ. m. phim, Django kết xuất cái này thành

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
09

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

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
10 cung cấp cho bạn sức mạnh này

$ python manage.py runserver
2

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

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
10 chỉ định ngày so sánh

Có một bộ lọc đồng hành với

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
10 được gọi là
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
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ự

Cả

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
10 và
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
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
$ pwd
/home/realpython/moviepalace
$ mkdir templates
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ác

Loạ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à

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
17. Đừng nhầm lẫn điều này với chức năng có tên tương tự trong Django

Để sử dụng thư viện của bên thứ ba trong các mẫu của bạn, bạn cần làm theo ba bước

  1. Cài đặt thư viện ứng dụng
  2. Đăng ký ứng dụng với
    Citizen Kane was released in 1941
    
    4 trong
    $ pwd
    /home/realpython/moviepalace
    $ mkdir templates
    
    3
  3. Tải các thẻ trong mẫu của bạn

Cài đặt thư viện ứng dụng Django không khác gì bất kỳ gói nào khác. Bạn có thể cài đặt nó bằng cách sử dụng

$ python manage.py runserver
7

$ python manage.py runserver
3

Với gói được cài đặt, hãy cập nhật phần

Citizen Kane was released in 1941
4 trong tệp
$ pwd
/home/realpython/moviepalace
$ mkdir templates
3 của bạn để Django biết về ứng dụng

$ python manage.py runserver
4

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ẻ

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
24

$ python manage.py runserver
5

Ở dòng 1, thẻ

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
24 thêm tất cả các thẻ từ
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
17 vào ngữ cảnh mẫu của bạn. Lưu ý rằng không có trích dẫn nào xung quanh
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
27. Điều này phù hợp với các tuyên bố của
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
28. Thư viện
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
17 có hơn 20 thẻ và bộ lọc. Ví dụ này cho thấy
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
30 trả về giá trị của
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
31 từ cài đặt Django

Có rất nhiều thư viện của bên thứ ba và rất nhiều thẻ có thể đơn giản hóa HTML của bạn. Sử dụng chúng chỉ là một

# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
32 và một thẻ
# moviepalace/urls.py
from django.urls import path
from moviefacts import views

urlpatterns = [
    path("citizen_kane/", views.citizen_kane),
]
24

Phần kết luận

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ó

Trong hướng dẫn này, bạn đã học cách

  • Sử dụng các đối tượng Django
    Citizen Kane was released in 1941
    
    6 và
    Citizen Kane was released in 1941
    
    7 để biên dịch một mẫu
  • Tải các mẫu từ tệp và trả lại chúng bằng phím tắt
    $ python manage.py runserver
    
    6
  • Viết mẫu với khối điều kiện và khối lặp
  • Sử dụng
    # moviepalace/urls.py
    from django.urls import path
    from moviefacts import views
    
    urlpatterns = [
        path("citizen_kane/", views.citizen_kane),
    ]
    
    37 và
    # moviepalace/urls.py
    from django.urls import path
    from moviefacts import views
    
    urlpatterns = [
        path("citizen_kane/", views.citizen_kane),
    ]
    
    38 để viết các thành phần mẫu có thể tái sử dụng
  • Sửa đổi dữ liệu bằng bộ lọc mẫu
  • 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

Sử dụng thẻ mẫu django trong javascript

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à

Sử dụng thẻ mẫu django trong javascript

Aldren

Sử dụng thẻ mẫu django trong javascript

Bartosz

Sử dụng thẻ mẫu django trong javascript

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?

Thêm JavaScript vào Mẫu Django của chúng tôi . Hãy tạo một ứng dụng. js, hãy đặt nó vào thư mục js mà bạn cần tạo trong thư mục tĩnh của ứng dụng. We can add JavaScript to our template using an inline