Как внедрить что-то в конце каждого рендера в 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
в настройках, как описано в документации.