Bunu middlware kullanarak gerçekleştirebilirsiniz. Şablonları ve bunları çağıran görünümleri takip ederken bir yandan da benzer bir sorun yaşıyordum. Bu nedenle, html yanıtının üst kısmına bir yorum bloğu ekleyen bir ara katman snippet'i yazdım. İstediğin şeyi yapmıyor, ama uyarlayabiliyorsun.
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
İyi soru! ['Django-debug-toolbar'] (https://github.com/django-debug-toolbar/django-debug-toolbar) veya [' django-template-repl'] (https: // github) olup olmadığını görebilirsiniz. .com/codysoyland/django-template-repl) yardımcı oluyor. –
Benim için 'django-template-repl' tamamen işe yaramıyor, çünkü tüm dosya ağacına girmem gerekiyor ve eğer hangi dosyanın kötüye olduğunu bilirsem cevabım onsuz olur. Şu anda oluşturduğum koddaki sihirli şablonlar nedeniyle bu soruyu oluşturdum. Bu, eklenen modele bağlı olarak sihir kullanıyor (liste olarak şablonlar: '(" {app_label}/{model}/{template} .html "," {template} .html ")') ve çıktı içeriği kullanılarak farklı şablona çok benzer. 'django-debug-toolbar' yakın ama yeterli değil, şimdi kullanıyorum. – zwierzak
sihir kötülüktür. Her bloktan sonra html yorumu eklemek/her bir engelle ilgili küçük bir sed script'i düşündünüz mü? – ornoone