Saya ingin memberikan konten yang sama di dalam 2 file dasar yang berbeda.
Jadi saya mencoba melakukan ini:
halaman1.html:
{% extends "base1.html" %}
{% include "commondata.html" %}
halaman2.html:
{% extends "base2.html" %}
{% include "commondata.html" %}
Masalahnya adalah saya tidak bisa menggunakan keduanya meluas dan menyertakan. Apakah ada cara untuk melakukannya? Dan jika tidak, bagaimana saya bisa mencapai hal di atas?
commondata.html menimpa blok yang ditentukan di base1.html dan base2.html
Tujuannya adalah untuk menyediakan halaman yang sama dalam format pdf dan html, yang formatnya sedikit berbeda. Pertanyaan di atas meskipun menyederhanakan apa yang saya coba lakukan jadi jika saya bisa mendapatkan jawaban itu akan menyelesaikan masalah saya.
sumber
Dari dokumen Django:
Jadi Django tidak mengambil blok apa pun dari commondata.html Anda dan tidak tahu apa yang harus dilakukan dengan html yang dirender di luar blok.
sumber
Ini akan melakukan trik untuk Anda: letakkan tag include di dalam bagian blok.
halaman1.html:
halaman2.html:
sumber
Info lebih lanjut tentang mengapa itu tidak berhasil untuk saya seandainya itu membantu orang di masa depan:
Alasan mengapa tidak berhasil adalah karena {% include%} dalam django tidak menyukai karakter khusus seperti apostrof yang mewah. Data templat yang saya coba masukkan ditempelkan dari kata. Saya harus secara manual menghapus semua karakter khusus ini dan kemudian berhasil dimasukkan.
sumber
Anda tidak dapat menarik blok dari file yang disertakan ke dalam template anak untuk mengganti blok template induk. Namun, Anda dapat menentukan induk dalam variabel dan memiliki templat dasar yang ditentukan dalam konteks.
Dari dokumentasi :
Alih-alih memisahkan "halaman1.html" dan "halaman2.html", letakkan
{% extends base_template %}
di bagian atas "commondata.html". Dan kemudian dalam tampilan Anda, tentukanbase_template
menjadi "base1.html" atau "base2.html".sumber
Ditambahkan untuk referensi bagi orang-orang mendatang yang menemukan ini melalui google: Anda mungkin ingin melihat tag {% overextend%} yang disediakan oleh perpustakaan mezanin untuk kasus seperti ini.
sumber
Edit 10 Des 2015 : Seperti yang ditunjukkan di komentar, ssi tidak digunakan lagi sejak versi 1.8. Menurut dokumentasi:
Menurut saya, jawaban yang tepat (terbaik) untuk pertanyaan ini adalah dari podshumok , karena menjelaskan mengapa perilaku include saat digunakan bersama dengan pewarisan.
Namun, saya agak terkejut bahwa tidak ada yang menyebutkan tag ssi yang disediakan oleh sistem template Django, yang secara khusus dirancang untuk sebaris termasuk bagian teks eksternal . Di sini, inline berarti teks eksternal tidak akan diinterpretasikan, diurai, atau diinterpolasi, tetapi hanya "disalin" di dalam template pemanggil.
Mohon, rujuk ke dokumentasi untuk detil lebih lanjut (pastikan untuk memeriksa versi Django Anda yang sesuai di selektor di bagian kanan bawah halaman).
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#ssi
Dari dokumentasi:
Waspadalah juga terhadap implikasi keamanan dari teknik ini dan juga definisi ALLOWED_INCLUDE_ROOTS yang diperlukan, yang harus ditambahkan ke file pengaturan Anda.
sumber