Die Antwort von @ error ist grundsätzlich richtig. Sie sollten hierfür ein Template-Tag verwenden. Ich bevorzuge jedoch ein etwas allgemeineres Vorlagen-Tag, mit dem ich ähnliche Vorgänge ausführen kann:
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 ''
und dann können Sie es so in Ihrer Vorlage verwenden:
{% captureas template %}shop/{{ shop_name }}/base.html{% endcaptureas %}
{% include template %}
Wie im Kommentar erwähnt, ist dieses Vorlagen-Tag besonders nützlich für Informationen, die in einer Vorlage wiederholbar sind, jedoch Logik und andere Dinge erfordern, die Ihre Vorlagen beschädigen, oder in Fällen, in denen Sie Daten, die zwischen Vorlagen über Blöcke übertragen werden, wiederverwenden möchten:
{% captureas meta_title %}{% spaceless %}{% block meta_title %}
{% if self.title %}{{ self.title }}{% endif %}
{% endblock %}{% endspaceless %} - DEFAULT WEBSITE NAME
{% endcaptureas %}
und dann:
<title>{{ meta_title }}</title>
<meta property="og:title" content="{{ meta_title }}" />
<meta itemprop="name" content="{{ meta_title }}">
<meta name="twitter:title" content="{{ meta_title }}">
Die Gutschrift für das Captureas-Tag ist hier fällig: https://www.djangosnippets.org/snippets/545/