将模板中的特定块渲染为字符串。
项目描述
Django Render Block
从Django模板中渲染特定块标签的内容。适用于任意模板继承,即使块在子模板中定义但不在父模板中。通常它的工作方式类似于Django的render_to_string,但允许您指定要渲染的块。
功能
从模板渲染特定块
完全支持Django模板引擎
部分支持Jinja2引擎:它目前不处理extends标签。
要求
Django Render Block支持Django 4.2、5.0和5.1,在Python 3.8、3.9、3.10、3.11和3.12上(有关特定Django版本支持的Python版本,请参阅Django文档)。
示例
在test1.html
{% block block1 %}block1 from test1{% endblock %}
{% block block2 %}block2 from test1{% endblock %}
在 test2.html 中
{% extends 'test1.html' %}
{% block block1 %}block1 from test2{% endblock %}
并且从 Python 虚拟环境中
>>> from render_block import render_block_to_string
>>> print(render_block_to_string('test2.html', 'block1'))
'block1 from test2'
>>> print(render_block_to_string('test2.html', 'block2'))
'block2 from test1'
它还可以接受一个作为 dict 的上下文(就像 render_to_string),在 test3.html 中
{% block block3 %}Render this {{ variable }}!{% endblock %}
并且从 Python 中
>>> print(render_block_to_string('test3.html', 'block3', {'variable': 'test'}))
'Render this test!'
API 参考
API 简单,并试图与内置的 render_to_string API 保持一致。
render_block_to_string(template_name, block_name, context=None, request=None)
- template_name
要加载和渲染的模板名称。如果是一个模板名称列表,Django 使用 select_template() 而不是 get_template() 来查找模板。
- block_name
从上述模板中要渲染的块名称。
- context
用作模板渲染上下文的 dict。可以为 Django 模板提供一个 Context 对象。
context 是可选的。如果没有提供,将使用空上下文。
- request
用于渲染模板的请求对象。
request 是可选的,并且仅适用于 Django 模板。如果同时提供了 context 和 request,则将使用 RequestContext 而不是 Context。
异常
与 render_to_string 一样,这将引发以下异常
- TemplateDoesNotExists
如果在 template_name 中指定的模板无法加载时引发。
- TemplateSyntaxError
如果加载的模板包含无效的语法时引发。
还可以引发两种附加的错误
- BlockNotFound
如果在模板中找不到由 block_name 给定的块时引发。
- UnsupportedEngine
如果使用了除 Django 后端以外的模板后端时引发。
贡献
如果您发现了一个错误或对 Django Render Block 的改进有想法,请 提交一个 issue 或提供 pull request!查看 issue 列表 以获取要工作的想法。
归属
这是基于一些来源
更新版本 Django Snippet 942
这些片段的版本已移植为 Django-Block-Render
还受到了 django-templated-email 部分灵感的启发
变更日志
0.10 (2024年7月15日)
与 0.10b1 无变化。
0.10b1 (2024年7月1日)
错误修复
修复了渲染模板时的异常传播问题。由 @yaakovLowenstein 贡献。(#52)
修复了在多个扩展模板中渲染块的问题。(#56)
维护
0.9.2 (2022年10月18日)
维护
0.9.1 (2021年12月15日)
维护
0.9 (2021年12月14日)
维护
0.8.1 (2020年10月15日)
错误修复
修复了 v0.8 版本中的一个回归问题,其中 Context 无法重复使用。由 @evanbrumley 贡献。(#25)
0.8 (2020年10月6日)
错误修复
render_block_to_string 现在可以选择接受一个 request 参数。如果提供,则使用 Django 模板引擎渲染时,使用 RequestContext 而不是 Context。由 @bblanchon 贡献。(#21)
维护
停止支持 Python 3.5,支持 Python 3.9。(#22)
0.7 (2020年7月13日)
维护
0.6 (2019年5月8日)
改进
维护
0.5 (2016年9月1日)
错误修复
修复了继承模板并在父模板中找到要渲染的块,但在子模板中覆盖其中一部分的严重问题。(#8)
0.4 (2016年8月4日)
改进
维护
0.3.1(2016年6月1日)
维护
重构以使其更加通用(以支持多个模板引擎)。
0.3(2016年5月27日)
大部分重写。
支持Django 1.8和1.9
保护不同的模板后端。
使用每个节点的内部API。
移除了context_instance参数。
支持调用{{ block.super }}。
0.2.2(2011年1月10日)
根据Django Snippet 942上的评论3466(eugenyboger)更新,修复了嵌套扩展的问题。具体的错误不可重现,但额外的代码不应有害。
0.2.1(2010年8月27日)
根据Django Snippet 942上的评论3237(chadselph)更新,移除了无意义的渲染。具体的错误不可重现,但移除的代码是多余的。
0.2(2008年8月4日)
从Django Snippet 942更新版本(zbyte64)。
改进了包含功能
简化/更好地处理“extends”块标签
搜索If/Else块
更少的代码
允许传递模板列表,这更接近于render_to_response的行为
0.1(2008年5月22日)
从Django Snippet 769(sciyoshi)的初始版本。
支持Django 0.96。
项目详情
下载文件
下载适合您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。