Я знаю, что с помощью функции обратного вызова можно реализовать свой собственный сложный механизм решения, когда отображать панель инструментов отладки Django, а когда нет, но общие варианты использования фильтрации (например, проверка IP-адресов пользователей) должны быть максимально простыми.
Поэтому я предлагаю вариант конфигурации для _фильтрации (не отображения) панели инструментов на страницах, URL-адреса которых соответствуют определенному шаблону_ (или регулярному выражению). Например, если вы используете панель администратора Django, но не разрабатываете в ней что-либо, вам не нужна панель инструментов отладки, поэтому было бы неплохо отфильтровать панель инструментов для всех запросов под '^admin/'
. Такая же потребность возникает, если у вас есть страница с множеством небольших фреймов, и вы просто хотите отлаживать внешнее приложение и шаблоны Django, а не те, которые находятся в маленьких фреймах - здесь было бы неплохо скрыть панель инструментов для всех запросов к приложению с iframe.
Поэтому рекомендуется иметь одно или несколько регулярных выражений для фильтрации, в которых должна отображаться панель инструментов на основе запрошенного URL-адреса. Например, как сложное регулярное выражение или как список более простых регулярных выражений:
DEBUG_TOOLBAR_CONFIG = ( ... 'HIDE_FILTER_URL': '^admin/|^myapp/someview', ... )
or
DEBUG_TOOLBAR_FILTER_URL = ('^admin/', '^myapp/someview')
Я столкнулся с той же проблемой и согласился с gw0 в предложении реализации общих шаблонов фильтрации для быстрого удаления панели инструментов с совпадающих URL-адресов. Просто намек.
В любом случае, действительно хорошо поработала всемогущая панель инструментов отладки. Ребята, молодцы!
Теперь, когда # 324 исправлен, реализовать это стало очень просто. Вот как бы вы исключили админа:
from debug_toolbar.middleware import show_toolbar
def custom_show_toolbar(request):
return show_toolbar(request) and not request.path.startswith('/admin/')
Вот как можно исключить серию префиксов URL:
from debug_toolbar.middleware import show_toolbar
excluded_urls = ['/foo', '/bar']
def custom_show_toolbar(request):
excluded = any(request.path.startswith(url) for url in excluded_urls)
return show_toolbar(request) and not excluded
Я не думаю, что было бы проще использовать DSL для фильтрации URL-адресов. Обычный Python - подходящий инструмент для этого класса проблем.
В любом случае спасибо за предложение!
Для всех, кто попадает сюда, кажется, что строка from debug_toolbar.middleware import show_toolbar
запускает раннюю оценку настроек Django Debug Toolbars, а это означает, что любые последующие изменения в настройках не будут прочитаны. Мне нужно было выполнить импорт внутри функции, чтобы мои настройки вступили в силу.
def custom_show_toolbar(request):
from debug_toolbar.middleware import show_toolbar
return show_toolbar(request) and not request.path.startswith("/graphql")
DEBUG_TOOLBAR_CONFIG = {"SHOW_TOOLBAR_CALLBACK": custom_show_toolbar}