@ Fehler Antwort ist grundsätzlich richtig, Sie sollten ein Template-Tag dafür verwenden. Allerdings ziehe ich einen etwas allgemeinere Template-Tag, dass ich jede Art von Operationen ähnlich wie diese 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 der Vorlage verwenden:
{% captureas template %}shop/{{ shop_name }}/base.html{% endcaptureas %}
{% include template %}
Wie der Kommentar erwähnt, ist dieses Schablonen-Tag besonders nützlich für Informationen, die innerhalb einer Vorlage wiederholbar sind, aber Logik und andere Dinge erfordern, die Ihre Schablonen füllen, oder in Fällen, in denen Sie Daten zwischen Schablonen durch Blöcke 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 }}">
Kredit für den captureas Tag ist hier durch: https://www.djangosnippets.org/snippets/545/
Ich war total verwirrt von dieser Antwort, da es das include-Tag anstelle des extend-Tags verwendet, aber anscheinend funktioniert es einfach, obwohl ich Ahsans eigene Antwort empfehlen würde, da es auch funktioniert und (meiner Meinung nach) semantisch korrekter ist und erhöht weniger Verwechslung – rednaw
Dies kann funktionieren, sollte aber nicht als allgemeine Antwort auf die Verkettung von Strings in Django-Vorlagen betrachtet werden: http://stackoverflow.com/a/23783666/781695 – Medorator
Wie in der Django-Dokumentation gesagt, "Strings, die können zu Ganzzahlen gezwungen werden summiert werden, nicht verkettet "So, zum Beispiel, wenn Sie die Primärschlüssel des Modells Objekt verketten wollen (kann nützlich sein, um eindeutige Cache-Schlüssel zu erstellen), funktioniert es nicht. – zen11625