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:
from django import template
register = template.Library()
@register.tag(name='captureas')
def do_captureas(parser, token):
"""
Capture content for re-use throughout a template.
particularly handy for use within social meta fields
that are virtually identical.
"""
try:
tag_name, args = token.contents.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError("'captureas' node requires a variable name.")
nodelist = parser.parse(('endcaptureas',))
parser.delete_first_token()
return CaptureasNode(nodelist, args)
class CaptureasNode(template.Node):
def __init__(self, nodelist, varname):
self.nodelist = nodelist
self.varname = varname
def render(self, context):
output = self.nodelist.render(context)
context[self.varname] = output
return ''
dan kemudian Anda dapat menggunakannya seperti ini di templat Anda:
{% captureas template %}shop/{{ shop_name }}/base.html{% endcaptureas %}
{% include template %}
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:
{% captureas meta_title %}{% spaceless %}{% block meta_title %}
{% if self.title %}{{ self.title }}{% endif %}
{% endblock %}{% endspaceless %} - DEFAULT WEBSITE NAME
{% endcaptureas %}
lalu:
<title>{{ meta_title }}</title>
<meta property="og:title" content="{{ meta_title }}" />
<meta itemprop="name" content="{{ meta_title }}">
<meta name="twitter:title" content="{{ meta_title }}">
Kredit untuk tag captas jatuh tempo di sini: https://www.djangosnippets.org/snippets/545/