@ त्रुटि का उत्तर मौलिक रूप से सही है, आपको इसके लिए एक टेम्प्लेट टैग का उपयोग करना चाहिए। हालाँकि, मैं थोड़ा और जेनेरिक टेम्प्लेट टैग पसंद करता हूँ जिसका उपयोग मैं इस तरह के किसी भी प्रकार के ऑपरेशन को करने के लिए कर सकता हूँ:
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 ''
और फिर आप इसे अपने टेम्पलेट में इस तरह उपयोग कर सकते हैं:
{% captureas template %}shop/{{ shop_name }}/base.html{% endcaptureas %}
{% include template %}
जैसा कि टिप्पणी में उल्लेख किया गया है, यह टेम्प्लेट टैग विशेष रूप से उन सूचनाओं के लिए उपयोगी है जो पूरे टेम्प्लेट में दोहराई जा सकती हैं, लेकिन इसके लिए तर्क और अन्य चीजों की आवश्यकता होती है, जो आपके टेम्प्लेट को उकसाएंगे, या ऐसे उदाहरणों में जहां आप ब्लॉक के माध्यम से टेम्प्लेट के बीच पारित डेटा का पुन: उपयोग करना चाहते हैं:
{% captureas meta_title %}{% spaceless %}{% block meta_title %}
{% if self.title %}{{ self.title }}{% endif %}
{% endblock %}{% endspaceless %} - DEFAULT WEBSITE NAME
{% endcaptureas %}
और फिर:
<title>{{ meta_title }}</title>
<meta property="og:title" content="{{ meta_title }}" />
<meta itemprop="name" content="{{ meta_title }}">
<meta name="twitter:title" content="{{ meta_title }}">
कैपुरा टैग का श्रेय यहां दिया गया है: https://www.djangosnippets.org/snippets/545/