How to implement a custom template backend

    请参阅 DEP 182 以获取更多信息。

    为自定义引擎集成调试功能

    当模板有错误时Django调试页面会提供相应的钩子信息。自定义后端引擎能使用这些钩子来细化显示给用户的回溯信息。以下是可用的钩子:

    当错误 TemplateDoesNotExist 发生时显示剖析。它会列举出尝试查找指定模板时使用的模板引擎和加载器。举个例子,如果配置了两个Django引擎,剖析显示如下:

    当 错误触发时自定义引擎会填写 后端尝试 参数。使用剖析 :ref:` 的后端必须要指定模板对象上的一个来源 1` 。

    当模板解析或渲染时发生错误,Django会显示错误所在的行。举个例子:

    • 'name' :发生异常的模板名称
    • 'message': 异常信息。
    • 'source_lines': 异常发生的行及其前后内容。这是为了上下文,所以它不应该超过二十行。
    • 'line': 异常发生的行数。
    • 'before': 发生错误的标识符的错误行前面的内容。
    • 'during': 发生错误的标识符。
    • 'after': 发生错误的标识符的错误行后面的内容。
    • : source_lines 起始行数。
    • 'bottom': source_lines 结束的行数。

    根据上述模板错误, template_debug 会像这样:

    1. {
    2. 'name': '/path/to/template.html',
    3. 'message': "Invalid block tag: 'syntax'",
    4. 'source_lines': [
    5. (1, 'some\n'),
    6. (2, 'lines\n'),
    7. (3, 'before\n'),
    8. (4, 'Hello {% syntax error %} {{ world }}\n'),
    9. (5, 'some\n'),
    10. (6, 'lines\n'),
    11. ],
    12. 'line': 4,
    13. 'before': 'Hello ',
    14. 'during': '{% syntax error %}',
    15. 'after': ' {{ world }}\n',
    16. 'total': 9,
    17. 'bottom': 9,
    18. 'top': 1,
    19. }

    Django有一个可用 template.origin 属性的 Origin 基本对象类。这可以让调试信息显示在 。

    自定义引擎可以通过创建有以下特定属性的对象来提供自身的 template.origin 信息。

    • 'name': 模板的完整路径。
    • 'template_name': 通过模板加载方法打开的模板的相对路径。