@ คำตอบของ error คือพื้นฐานที่ถูกต้องคุณควรใช้เทมเพลตแท็กสำหรับสิ่งนี้ อย่างไรก็ตามฉันชอบแท็กเทมเพลตทั่วไปที่ฉันสามารถใช้เพื่อดำเนินการใด ๆ ที่คล้ายกับสิ่งนี้:
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 }}">
เครดิตสำหรับแท็ก captureas มีกำหนดที่นี่: https://www.djangosnippets.org/snippets/545/