Как внедрить что-то в конце каждого рендера в Django?

Я хочу вводить определенный HTML-комментарий в конце каждого рендера HTML в Django. Я не хочу писать его в конце шаблона base.html, а хочу, чтобы он внедрялся кодом. Есть ли способ сделать это?

Да, промежуточное программное обеспечение. Моя библиотека django-cavalry делает нечто подобное (как и, например, Django Debug Toolbar), но суть ее такова:

def inject_content(response):
    # TODO: check that the response is HTML content-type
    try:
        body_closing_index = (
            response.content.rindex(b"</body>")
        )
    except ValueError:
        return  # Can't find `</body>`, do nothing
    html = "<!-- Secret comment! -->"
    response.content = (
        response.content[:body_closing_index]
        + html.encode("utf-8")
        + response.content[body_closing_index:]
    )

    if "content-length" in response:
        response["content-length"] = len(
            response.content
        )


def my_middleware(get_response):
    def middleware(request):
        response = get_response(request)
        if isinstance(
            response, SimpleTemplateResponse
        ):
            response.render()
        inject_content(response)
        return response

    return middleware

и затем установите my_middleware в MIDDLEWARE в настройках, как описано в документации.

Вернуться на верх