Reputation: 57
I would like to include blocks from templates instead of macros, as many templates will be including content from many other templates, so extends
isn't an option.
I've read many answers about this, including blocks in included files, but the use case always seems to be different. I suspect this cannot be done.
template1.html
{% block description %}
<p> Here is a description </p>
{% endblock %}
And in template2.html
{% from 'template1.html' import description %} <- doesnt work
Upvotes: 2
Views: 1419
Reputation: 950
You have two options here.
Assuming you're using Flask, this is as easy as:
@app.template_filter('get_block')
def template_filter(block, file):
html = render_template(file)
# Then use regex or something to parse
# or even simple splits (better with named blocks), like...
content = html.split('{%% block %s %%}'%(block))[-1]
content = content.split('{%% endblock %%}')[0]
return content
And to use it:
{% 'description'|get_block('template1.html') %}
Upvotes: 3