Bagaimana mengesampingkan cetakan

Dalam proyek anda, anda mungkin ingin menimpa sebuah cetakan dalam aplikasi Django lain, apakai itu berupa aplikasi pihak-ketiga atau aplikasi bantuan seperti django.contrib.admin. Anda dapat antara menaruh cetakan menimpa dalam direktori cetakan proyek anda atau dalam sebuah direktori cetakan aplikasi.

Jika anda mempunyai aplikasi dan direktori cetakan proyek yang kedua kandungan menimpa, pemuat cetakan Django awalan akan mencoba memuat cetakan dari direktori tingkat-proyek dahulu. Dengan kata lain, DIRS 1 dicari sebelum APP_DIRS 2.

Lihat juga

Baca Menimpa cetakan widget siap-pakai jika anda sedang mencari untuk melakukannya.

Menimpa dari direktori cetakan proyek

Pertama, kami akan menjelajahi menimpa cetakan dengan membuat cetakan pengganti dalam direktori cetakan proyek anda.

Mari kita katakan anda sedang mencoba menimpa cetakan untuk aplikasi pihak-ketiga disebut blog, yang menyediakan cetakan blog/post.html dan blog/list.html. Pengaturan terkait untuk proyek anda akan terlihat seperti:

from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

INSTALLED_APPS = [
    ...,
    "blog",
    ...,
]

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        # ...
    },
]

Pengaturan TEMPLATES dan BASE_DIR akan sudah ada jika anda membuat proyek anda menggunakan cetakan proyek awalan. Pengaturan yang butuh dirubah adalah DIRS1.

Pengaturan ini menganggap anda mempunyai sebuah direktori templates dalam akar dari proyek anda. Untuk menimpa cetakan untuk aplikasi blog, buat sebuah folder dalam direktori templates, dan tambah berkas-berkas cetakan ke folder itu.

templates/
    blog/
        list.html
        post.html

Pemuat cetakan pertama mencari untuk cetakan dalam direktori DIRS. ketika tampilan dalam aplikasi blog untuk cetakan blog/post.html dan blog/list.html, pemuat akan mengembalikan berkas-berkas anda telah buat.

Menimpa dari direktori cetakan aplikasi

Sejak anda sedang menimpa cetakan bertempat di luar dari satu dari aplikasi proyek anda, itu adalah lebih umum menggunakan metode pertama dan menaruh cetakan penimpaan dalam sebuah folder cetakan proyek. Jika anda memilih, bagaimanapun, itu juga memungkinkan menaruh penimpaan dalam sebuah direktori cetakan aplikasi.

Pertama, pastikan pengaturan cetakan anda memeriksa didalam direktori aplikasi:

TEMPLATES = [
    {
        # ...
        "APP_DIRS": True,
        # ...
    },
]

Jika anda ingin menaruh cetakan penimpaan dalam sebuah aplikasi disebut myapp dan cetakan untuk menima bernama blog/list.html dan blog/post.html, kemudian struktur direktori anda akan terlihat seperti:

myapp/
    templates/
        blog/
            list.html
            post.html

Dengan APP_DIRS1 disetel menjadi True, pemuat cetakan akan terlihat dalam direktori cetakan aplikasi dan menemukan cetakan.

Memperluas cetakan yang diganti

Dengan pemuat cetakan dikonfigurasikan, anda dapat memperpanjang cetakan menggunakan etiket cetakan {% extends %} sementara pada saat yang sama mengesampingkannya. Hal ini memungkinkan anda membuat penyesuaian kecil tanpa perlu menerapkan ulang keseluruhan cetakan.

Sebagai contoh, anda dapat menggunakan teknik ini untuk menambahkan logo penyesuaian pada cetakan admin/base_site.html:

templates/admin/base_site.html
 {% extends "admin/base_site.html" %}

 {% block branding %}
   <img src="link/to/logo.png" alt="logo">
   {{ block.super }}
 {% endblock %}

Titik kunci pada catatan:

  • Contoh membuat sebuah berkas pada templates/admin/base_site.html yang menggunakan tingkat-proyek dikonfigurasikan direktori templates directory untuk menimpa admin/base_site.html.

  • Cetakan baru meluas admin/base_site.html, yang merupakan cetakan sama seperti sedang ditimpa.

  • Cetakan hanya mengganti blok branding, menambahkan logo penyesuaian, dan menggunakan block.super untuk mempertahankan konten sebelumnya.

  • Sisa dari cetakan diturunkan tidak berubah dari admin/base_site.html.

Teknik ini bekerja karena pemuat cetakan tidak mempertimbangkan cetakan pengganti yang sudah dimuat (pada templates/admin/base_site.html) ketika mengatasi etiket extends. Gabungkan dengan block.super itu adalah teknik sangat kuat untuk membuat penyesuaian kecil.

Back to Top