La respuesta de @ error es fundamentalmente correcta, debe usar una etiqueta de plantilla para esto. Sin embargo, prefiero una etiqueta de plantilla un poco más genérica que pueda usar para realizar cualquier tipo de operaciones similares a esta:
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 ''
y luego puedes usarlo así en tu plantilla:
{% captureas template %}shop/{{ shop_name }}/base.html{% endcaptureas %}
{% include template %}
Como se menciona en el comentario, esta etiqueta de plantilla es particularmente útil para la información que se puede repetir a través de una plantilla pero requiere lógica y otras cosas que agruparán sus plantillas, o en los casos en que desee reutilizar los datos pasados entre plantillas a través de bloques:
{% captureas meta_title %}{% spaceless %}{% block meta_title %}
{% if self.title %}{{ self.title }}{% endif %}
{% endblock %}{% endspaceless %} - DEFAULT WEBSITE NAME
{% endcaptureas %}
y entonces:
<title>{{ meta_title }}</title>
<meta property="og:title" content="{{ meta_title }}" />
<meta itemprop="name" content="{{ meta_title }}">
<meta name="twitter:title" content="{{ meta_title }}">
El crédito para la etiqueta captureas se debe aquí: https://www.djangosnippets.org/snippets/545/