Django:将模板路径显示为覆盖

hack客

我知道django-debug-toolbar有一个Templates视图,它将列出在页面请求上调用的所有模板。这很有用,但我正在寻找可以走得更远的内容,并在页面的每个块上直观地显示标签,指定用于绘制该块的模板(类似于Web开发人员扩展或Firebug等HTML调试工具) 。

是否有已经执行此操作的软件包?如果没有,模板是否可以显示其自己的名称?这样,我可能可以编写一个自定义模板标记,以在调试模式下执行此操作。


更新:我们使用的最终解决方案是对以下Stephan解决方案的修改。在这个要点中,我将工作版本打包为自定义模板加载器:

https://gist.github.com/shacker/9261885

史提芬

我还没有测试过,但是您可能可以编写自己的Template类。

from django.template.base import Template

class DebugTemplate(Template):
  def _render(self, context):
    rendered_template = Template._render(self, context)
    if settings.DEBUG:
      overlay = Template("overlay.html")
      context = Context({"rendered_template": rendered_template})
      return overlay.render(context)
    return rendered_template

您的覆盖模板将放置您想要的任何周围的html,并使用{{rendered_template}}变量标签放置实际内容。

然后,您必须制作自己的加载器,以使用此Template类而不是内置的Django类。我认为没有设置可以指定要使用的Template类的设置,但是您可以指定加载程序。

在django / template / loader.py中,您可以找到BaseLoader;在django / template / loaders /中,您可以找到加载器本身。您可以创建一个DebugLoader:

from django.template.loader import BaseLoader

class DebugLoader(BaseLoader):
  is_usable = True

  def __init__(self, loaders):
    self._loaders = loaders
    self._cached_loaders = []

  @property
  def loaders(self):
    # Resolve loaders on demand to avoid circular imports
    if not self._cached_loaders:
        # Set self._cached_loaders atomically. Otherwise, another thread
        # could see an incomplete list. See #17303.
        cached_loaders = []
        for loader in self._loaders:
            cached_loaders.append(find_template_loader(loader))
        self._cached_loaders = cached_loaders
    return self._cached_loaders

  def load_template(self, template_name, template_dirs=None):
    source = None

    for loader in self.loaders:
      try:
        source, display_name = loader.load_template_source(template_name, template_dirs)
      except TemplateDoesNotExist:
        pass
      else:
        break

    if not source:
      raise TemplateDoesNotExist

    origin = make_origin(display_name, loader.load_template_source, template_name, template_dirs)

    try:
      self.get_template_from_string(source, origin, template_name)
      return template, None
    except TemplateDoesNotExist:
      return source, display_name

  def get_template_from_string(self, source, origin, template_name):
    return DebugTemplate(source, origin, name)

因此,我从CachedLoader中提取了部分数据,并且没有放入所有导入文件。在加载程序中列出它,并将其设置为与CachedLoader相同(不确定它如何与缓存的加载程序本身一起工作)。

它应该像其他加载程序一样获取模板,然后使用DebugTemplate代替默认的Template。

就像我说的,我没有对此进行测试。这就是我能想到的,而无需付出太多努力。让我知道您可能需要的任何澄清。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

django:模板显示时区也为日期时间

来自分类Dev

django:模板显示时区也为日期时间

来自分类Dev

django模板图像不显示为静态

来自分类Dev

在Django模板中将多行显示为网格

来自分类Dev

Django将嵌套模板渲染为pdf

来自分类Dev

Django:将Json数据解析为模板

来自分类Dev

Django将嵌套模板渲染为pdf

来自分类Dev

Django模板覆盖

来自分类Dev

将JS变量发布到Django视图并在单独的模板中显示为上下文变量

来自分类Dev

如何在Django的imagefield中将图像显示为模板

来自分类Dev

如何显示在模板中选择为true的Django BooleanFields?

来自分类Dev

Django:ManyToManyField在我的模板上显示为空

来自分类Dev

如何将模板 Flask 中的对象显示为 json?

来自分类Dev

如何将jQuery变量设置为Django模板变量

来自分类Dev

与Django模板中的路径混淆

来自分类Dev

了解Django中的模板路径

来自分类Dev

Django扩展模板的文件路径

来自分类Dev

将说明符覆盖为模板参数-有效吗?

来自分类Dev

Django模板未显示

来自分类Dev

Django模板不显示

来自分类Dev

Django:如果模板为空,模型的某些属性在模板上显示无

来自分类Dev

Maven项目显示为路径

来自分类Dev

Django模板:如何将显示对象的PK / ID从模板传递回Views.py文件?

来自分类Dev

使用Python 3.4将Django / Gunicorn部署到Nginx服务器发现模板的路径错误

来自分类Dev

为Haystack模板指定替代路径

来自分类Dev

如何覆盖Django-CMS模板

来自分类Dev

Django套装无法检测到模板覆盖

来自分类Dev

覆盖Django-LFS中的模板

来自分类Dev

如何覆盖Django-CMS模板