Saya ingin menyatukan string dalam tag template Django, seperti:
{% extend shop/shop_name/base.html %}
Ini shop_name
adalah variabel saya dan saya ingin menggabungkan ini dengan sisa jalur.
Misalkan saya punya shop_name=example.com
dan saya ingin hasil diperpanjang shop/example.com/base.html
.
django
django-templates
Ahsan
sumber
sumber
shop_name
sama sekali, jadi berbahaya.shop_name
sebelum meneruskannya ke konteks dalam tampilan,get_context_data
pastikan terjemahan itu diterjemahkan menggunakanugettext
alih-alihugettext_lazy
.Jangan gunakan
add
untuk string, Anda harus mendefinisikan tag khusus seperti ini:Buat file:
<appname>\templatetags\<appname>_extras.py
dan kemudian menggunakannya seperti yang dikatakan @Steven
Alasan menghindari
add
:Menurut dokumen
Jika kedua variabel tersebut adalah bilangan bulat, hasilnya tidak terduga.
sumber
add
" saja tidak digunakanstr()
di tempat pertama dan tidak bekerja sama sekali untuk saya sedangkan solusi Anda bekerja dengan sempurna{% load <appname>_extras %}
Saya telah mengubah hierarki folder
dan kemudian di bawah ini akan bekerja.
Sekarang ini dapat memperluas halaman base.html.
sumber
Merujuk pada Concatenating String di Django Templates :
Untuk versi Django sebelumnya:
{{ "Mary had a little"|stringformat:"s lamb." }}
Lain:
{{ "Mary had a little"|add:" lamb." }}
sumber
Lihatlah
add
filternya .Sunting: Anda dapat membuat rantai filter, sehingga Anda bisa melakukannya
"shop/"|add:shop_name|add:"/base.html"
. Tapi itu tidak akan berfungsi karena terserah pada tag template untuk mengevaluasi filter dalam argumen, dan extends tidak.Saya kira Anda tidak dapat melakukan ini dalam template.
sumber
Dari dokumen:
Tag ini dapat digunakan dalam dua cara:
{% extends "base.html" %}
(dengan tanda kutip) menggunakan nilai literal "base.html" sebagai nama templat induk untuk diperluas.{% extends variable %}
menggunakan nilai variabel. Jika variabel mengevaluasi ke string, Django akan menggunakan string itu sebagai nama templat induk. Jika variabel mengevaluasi ke objek Templat, Django akan menggunakan objek itu sebagai templat induk.Jadi sepertinya Anda tidak dapat menggunakan filter untuk memanipulasi argumen. Di tampilan panggilan Anda harus instantiate template leluhur atau membuat variabel string dengan jalur yang benar dan meneruskannya dengan konteks.
sumber
Jawaban @ error pada dasarnya benar, Anda harus menggunakan tag templat untuk ini. Namun, saya lebih suka tag templat yang sedikit lebih umum yang dapat saya gunakan untuk melakukan segala jenis operasi yang mirip dengan ini:
dan kemudian Anda dapat menggunakannya seperti ini di templat Anda:
Seperti komentar yang disebutkan, tag templat ini sangat berguna untuk informasi yang dapat diulang di seluruh templat tetapi membutuhkan logika dan hal-hal lain yang akan merusak templat Anda, atau dalam kasus di mana Anda ingin menggunakan kembali data yang dikirimkan antara templat melalui blok:
lalu:
Kredit untuk tag captas jatuh tempo di sini: https://www.djangosnippets.org/snippets/545/
sumber
Saya merasa bekerja dengan
{% with %}
tag itu cukup merepotkan. Alih-alih, saya membuat tag templat berikut, yang seharusnya berfungsi pada string dan integer.Kemudian muat tag templat di templat Anda di atas menggunakan yang berikut ini:
Anda kemudian dapat menggunakannya dengan cara berikut:
Saya pribadi menemukan ini menjadi jauh lebih bersih untuk dikerjakan.
sumber
Anda tidak dapat melakukan manipulasi variabel dalam template Django. Anda memiliki dua opsi, baik menulis tag templat Anda sendiri atau melakukannya dalam tampilan,
sumber
extends
tidak memiliki fasilitas untuk ini. Entah letakkan seluruh jalur templat dalam variabel konteks dan gunakan itu, atau salin tag templat yang ada dan modifikasi dengan tepat.sumber
Dan beberapa rangkaian:
Dan di Templat:
sumber