Sie können dies möglicherweise mit Middleware erreichen. Vor einiger Zeit hatte ich ein ähnliches Problem, indem ich die Vorlagen und die sie aufrufenden Ansichten im Auge behielt, also schrieb ich ein Middleware-Snippet, das oben auf der HTML-Antwort einen Kommentarblock hinzufügte. Es tut nicht ganz das, was Sie fragen, aber Sie könnten es vielleicht anpassen.
COMMENT_BLOCK = """
<!--
[ url ] >> http://%(host)s%(path)s
[ referer ] >> %(referer)s
[ module ] >> %(module)s
[ function ] >> %(function)s, line %(line)s
[ args ] >> args=%(args)s, kwargs=%(kwargs)s, defaults=%(defaults)s
[ template ] >> %(template)s
-->
"""
# Add any additional template types you wish to add the comment block to.
MIMETYPES = (
"text/html",
"text/xml",
)
class HtmlTemplateFinder:
def __init__(self):
self.host = None
self.referer = None
self.path = None
self.module = None
self.function = None
self.line = None
self.args = None
self.kwargs = None
self.defaults = None
self.template = None
self.valid_template = False
def _populate_comment_block(self):
return COMMENT_BLOCK % {
'host': self.host,
'referer': self.referer,
'path': self.path,
'module': self.module,
'function': self.function,
'line': self.line,
'args': self.args,
'kwargs': self.kwargs,
'defaults': self.defaults,
'template': self.template,
}
def process_view(self, request, view_func, view_args, view_kwargs):
self.host = request.META.get('HTTP_HOST', None)
self.referer = request.META.get('HTTP_REFERER', None)
self.path = request.path
self.module = view_func.func_code.co_filename
self.function = ('.').join((view_func.__module__, view_func.func_name))
self.line = view_func.func_code.co_firstlineno
self.args = view_args
self.kwargs = view_kwargs
self.defaults = view_func.func_defaults
return None
def process_template_response(self, request, response):
from mimetypes import guess_type
# Use this rather than response.template_name, this always returns str
self.template = response.resolve_template(response.template_name).name
self.valid_template = guess_type(self.template)[0] in MIMETYPES
return response
def process_response(self, request, response):
from <your app> import settings
if settings.DEBUG:
if self.valid_template:
block = self._populate_comment_block()
response.content = "%s%s" % (block, response.content)
return response
Gute Frage! Sie können sehen, ob ['django-debug-toolbar'] (https://github.com/django-debug-toolbar/django-debug-toolbar) oder [' django-template-repl'] (https: // github .com/codysoyland/django-template-repl) ist hilfreich. –
Für mich ist 'django-template-repl' total nutzlos, weil ich einen ganzen Baum von Dateien hineingeben muss und wenn ich die Antwort wissen würde, welche Datei schlecht ist, würde ich meine Antwort ohne sie haben. Ich habe diese Frage wegen der magischen Templatetags in Code erstellt, die ich jetzt pflege, die Magie abhängig vom eingefügten Modell verwenden (Vorlagen als Liste: '(" {app_label}/{modell}/{template} .html "," {template} .html ")') und die Ausgabe ist zu unterschiedlich zu einer Vorlage, die ihren Inhalt verwendet. 'django-debug-toolbar' ist nah dran, aber nicht genug, jetzt benutze ich es. – zwierzak
Magie ist böse. hast du an ein kleines sed-script gedacht, um den html-kommentar nach jedem block/include und vor jedem endblock hinzuzufügen? – ornoone