Menimpa 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.
Extending an overridden template¶
With your template loaders configured, you can extend a template using the
{% extends %}
template tag whilst at the same time overriding
it. This can allow you to make small customizations without needing to
reimplement the entire template.
For example, you can use this technique to add a custom logo to the
admin/base_site.html
template:
{% extends "admin/base_site.html" %} {% block branding %} <img src="link/to/logo.png" alt="logo"> {{ block.super }} {% endblock %}
Key points to note:
- The example creates a file at
templates/admin/base_site.html
that uses the configured project-leveltemplates
directory to overrideadmin/base_site.html
. - The new template extends
admin/base_site.html
, which is the same template as is being overridden. - The template replaces just the
branding
block, adding a custom logo, and usingblock.super
to retain the prior content. - The rest of the template is inherited unchanged from
admin/base_site.html
.
This technique works because the template loader does not consider the already
loaded override template (at templates/admin/base_site.html
) when
resolving the extends
tag. Combined with block.super
it is a powerful
technique to make small customizations.