【问题标题】:Can I use the django debug_toolbar on the admin pages?我可以在管理页面上使用 django debug_toolbar 吗?
【发布时间】:2016-10-03 21:09:18
【问题描述】:

(注意:答案是合格的“是” - 如果不是我的 requirejs 配置问题,它应该可以工作 - 请参阅最后的更新)

我正在考虑为一些需要精明的最终用户进行维护的模型定制管理员。

我已经看到了一些关于如何实现这一点的 SO 问题,例如 How to override and extend basic Django admin templates?

我希望了解管理员在任何特定时间点正在使用哪些模板文件是高效定制的关键。所以,我重新启用了 Django 调试工具栏(希望这次不会出现 requirejs 的副作用)。

Django 调试工具栏有效并显示在我的应用程序页面中。但它不会显示在管理页面上。这是意料之中的事吗?

Django (1.8.11)
django-debug-toolbar (1.4)

为什么它不工作/更新:

我想我知道发生了什么。在查看 Firebug 以查看管理页面涉及的 CSS 时,我注意到它正在请求调试工具栏 CSS:

http://localhost:8000/static/debug_toolbar/css/toolbar.css

这让我再次想到 requireJS 不兼容。果然,在控制台中,我看到了这个错误。

类型错误:$ 未定义 http://localhost:8000/static/debug_toolbar/js/toolbar.js 第 297 行

所以,又是一个 requireJS-DJT 故障。

仅供参考,我的 requireJS 调试工具栏解决方法是(来自 https://github.com/django-debug-toolbar/django-debug-toolbar/issues/605):

settings.py

DEBUG_TOOLBAR_CONFIG = {
"JQUERY_URL": None,

}

在我的应用程序的基本模板中:

(这是管理页面中缺少的部分)

{% block requirejs %}

//as per DJDT recommendations, make sure jquery loads before requireJS
<script type="text/javascript" src="/static/websec/external/jquery-2.1.1.min"></script>



<script type="text/javascript" src="{{STATIC_URL}}websec/external/require.js"></script>
<script>
//defines the requirejs configuration in general.
{% include "websec/requirejs_config.html" %}
</script>

【问题讨论】:

    标签: django requirejs admin


    【解决方案1】:

    为最终用户使用内置管理后端通常被认为是不好的做法。

    尝试检查页面中的 foy &lt;body&gt;&lt;/body&gt; 标签。没有这些将无法加载。

    然后尝试在 settings.py 中添加 INTERNAL_IPS = ('127.0.0.1')

    要使其仅为管理面板内的用户加载,您可以向自定义管理页面添加标签并更改 settings.DEBUG_TOOLBAR_CONFIG['INSERT_BEFORE']
    文档:here

    最后强制它显示在任何地方,你可以尝试将它添加到设置文件中:

    def show_toolbar(request):
        return True
    DEBUG_TOOLBAR_CONFIG = {
        "SHOW_TOOLBAR_CALLBACK" : show_toolbar,
    }
    

    要停止调试工具栏检查它是否应该出现,它总是只用于测试/开发目的。所有其他用户也可以看到它。

    文档:here

    【讨论】:

    • 不,没有效果。重新启动 django 和 DEBUG 为 True,但没有变化。
    • 是的,我知道这不是正常的做法。但上下文是它是一个基于 VM 的应用程序,因此现场用户必须能够通过管理员至少配置其中的一部分。如果在这种情况下外观和感觉没有完全不同,那就太好了。无论如何,真的只是看看它,我可能会决定坚持公认的智慧并编写自定义页面。
    • 仅在管理页面上尝试使用自定义标记的 INSERT_BEFORE 设置
    • 标签在管理页面中。 INTERNAL_IPS = ('127.0.0.1') 也没有效果。我没有尝试 INSERT_BEFORE。我暂时在管理员中推迟 Django 调试工具栏。 site-packages/django/contrib/admin/templates/admin 目录中没有那么多东西,而且看起来很不言自明,所以我可能不需要工具栏来找到我的方式全部。
    • 您实际上可以获取一个包来更改管理员的外观以使其更好。我个人喜欢西装。而且我相信您可以使用 admin.py 广泛自定义第一个登录屏幕上显示的内容
    【解决方案2】:

    让 debug_toolbar 和管理员一起工作我必须做些什么的快速概览。

    您想自己加载 jquery,即使 requireJS 也被配置为处理它。

    来自https://github.com/django-debug-toolbar/django-debug-toolbar/issues/605

    settings.py

    DEBUG_TOOLBAR_CONFIG = {
    "JQUERY_URL": None,
    

    }

    现在,设置管理员在 requireJS 之外加载 jquery,以便调试工具栏可以找到它:

    我本来打算自定义那个管理员,所以创建 base_site.html 覆盖没什么大不了的。

    /myproj/templates/admin/base_site.html

    {% block extrahead %}
    ***************         add this (with proper path)   ************************
    <script type="text/javascript" src="{{STATIC_URL}}websec/external/jquery-2.1.1.min.js"></script>
    *******************************************************************
    <script type="text/javascript" src="{{STATIC_URL}}websec/external/require.js"></script>
    <script>
    {% include "websec/requirejs_config.html" %}
    require(['bootstrap'], function(bootstrap){
    });
    </script>
    {% endblock %}
    

    这类似于我必须对我网站的祖先模板执行的操作以使 debug_toolbar 和 requireJS 共存:

    /myproj/templates/websec/__base.html

    {% block requirejs %}
    
    <script type="text/javascript" src="/static/websec/external/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="{{STATIC_URL}}websec/external/require.js"></script>
    <script>
    //defines the requirejs configuration in general.
    {% include "websec/requirejs_config.html" %}
    </script>
    {% endblock requirejs %}
    

    不相关,但在单元测试期间摆脱 debug_toolbar 的好方法:

    settings.py

    INSTALLED_APPS = (
        'django.contrib.auth',
        #... more stuff
    
    
        'debug_toolbar',
    
        'myapp',
        'djcelery',
        'crispy_forms',
    )
    
    #hack, but debug toolbar totally collapses performance on some tests
    pgm = os.path.basename(sys.argv[0])
    if pgm.startswith("test") or pgm.startswith("nosetests"):
    
        li = [app for app in INSTALLED_APPS if not app == "debug_toolbar"]
        INSTALLED_APPS = tuple(li)
    

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2013-12-15
      • 2015-03-08
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多