Katakanlah saya punya template
<html>
<div>Hello {{name}}!</div>
</html>
Saat mengujinya, akan berguna untuk menentukan nilai variabel tanpa menyentuh kode python yang memanggil template ini. Jadi saya mencari sesuatu seperti ini
{% set name="World" %}
<html>
<div>Hello {{name}}!</div>
</html>
Apakah ada yang seperti ini di Django?
django
django-templates
Alexis
sumber
sumber
Buat tag templat:
Aplikasi harus berisi
templatetags
direktori, pada tingkat yang sama denganmodels.py
,,views.py
dll. Jika ini belum ada, buatlah - jangan lupa__init__.py
file untuk memastikan direktori diperlakukan sebagai paket Python.Buat file dengan nama
define_action.py
di dalam direktori templatetags dengan kode berikut:Catatan: Server pengembangan tidak akan memulai ulang secara otomatis. Setelah menambahkan
templatetags
modul, Anda harus me-restart server Anda sebelum Anda dapat menggunakan tag atau filter dalam template.Kemudian di templat Anda, Anda dapat menetapkan nilai ke konteks seperti ini:
sumber
add
:{% define counter|add:1 as counter %}
. Demikian pula untuk operasi lain.Cara alternatif yang tidak mengharuskan Anda meletakkan segala sesuatu di blok "with" adalah membuat tag khusus yang menambahkan variabel baru ke konteksnya. Seperti dalam:
Ini akan memungkinkan Anda untuk menulis sesuatu seperti ini di templat Anda:
Perhatikan bahwa sebagian besar diambil dari sini
sumber
Ada trik seperti yang dijelaskan oleh John; namun, bahasa template Django menurut desain tidak mendukung pengaturan variabel (lihat kotak "Philosophy" dalam dokumentasi Django untuk templat ).
Karena itu, cara yang disarankan untuk mengubah variabel apa pun adalah dengan menyentuh kode Python.
sumber
Solusi terbaik untuk ini adalah dengan menulis kebiasaan
assignment_tag
. Solusi ini lebih bersih daripada menggunakanwith
tag karena memberikan pemisahan yang sangat jelas antara logika dan gaya.Mulai dengan membuat file tag templat (mis.
appname/templatetags/hello_world.py
):Sekarang Anda dapat menggunakan
get_addressee
tag templat di templat Anda:sumber
Mungkin
default
filter templat bukan opsi kembali pada tahun 2009 ...sumber
{% with state=form.state.value|default:other_context_variable %}
bukannyaother_context_variable
kita juga dapat menggunakan'string_value'
jugaIni bukan ide yang baik secara umum. Lakukan semua logika dengan python dan berikan data ke templat untuk ditampilkan. Template harus sesederhana mungkin untuk memastikan mereka yang bekerja pada desain dapat fokus pada desain daripada khawatir tentang logika.
Untuk memberikan contoh, jika Anda memerlukan beberapa informasi turunan dalam templat, lebih baik memasukkannya ke dalam variabel dalam kode python dan kemudian meneruskannya ke templat.
sumber
Gunakan pernyataan with .
Saya tidak dapat menyiratkan kode pada paragraf pertama dalam jawaban ini . Mungkin bahasa templat telah meninggalkan format lama.
sumber
Di template Anda, Anda dapat melakukan hal ini:
Dalam tag-template Anda, Anda dapat menambahkan tag seperti ini:
sumber