2017-01-19 2 views
0

Кажется, что последний модуль панели отладки Django теперь изменился на промежуточное программное обеспечение и требует явной настройки URL-адреса для работы. С моими проектами Django я всегда стараюсь, чтобы настройки были организованы на основе среды, а не if settings.DEBUG, замусоренные по всем файлам настроек и проекту.Переопределение/добавление к URL-адресам Django в настройках, а не URL-адресах

Мои настройки макета является общим:

common.py (everything in here) 
development.py (dev only things here) 
production.py (prod only things here) 

Есть ли способ в Django 1.10 я могу добавить к URL-адресам в development.py файл, так что я могу держаться подальше от if settings.DEBUG. Или мы будем вынуждены использовать этот метод, если вы хотите использовать новую версию панели инструментов отладки?

Я просто найти ниже немного анти-паттерна

if settings.DEBUG: 
    import debug_toolbar 
    urlpatterns += [ 
     url(r'^__debug__/', include(debug_toolbar.urls)), 
    ] 

ответ

0

Если вы не чувствуете, как тестирование на стоимости settings.DEBUG в конфигурации URL, вы можете управлять URL, с шаблон, аналогичный тому, который вы используете для своих настроек.

Вместо urls.py файла, вы бы urls пакет с этой структурой:

urls 
├── __init__.py 
├── common.py 
├── local.py 
└── production.py 

В ваших различных настроек файлов нужно указать, какой файл URL конф использовать этот способ:

# settings/local.py 
ROOT_URLCONF = 'urls.local' 

# settings/production.py 
ROOT_URLCONF = 'urls.production' 

Файлбудет выставлять элемент urlpattern, содержащий все шаблоны URL, общие для всех конфигураций, которые вы будете импортировать и использовать в urls/local.py и urls/production.py.

Например:

# urls/common.py 
urlpatterns = [ 
    # Put all common URL patterns here 
] 

# urls/local.py 
from .common.py import urlpatterns as common_urlpatterns 

urlpatterns = common_urlpatterns + [ 
    url(r'^__debug__/', include(debug_toolbar.urls)), 
] 

Если вы хотите знать мое мнение, это решение чувствует себя излишним, учитывая, что, в отличие от настроек, конфигурации URL не должен сильно отличаться от окружающей среды.

+0

Как ни странно, я не думал об этом сначала, хотя я делаю это для настроек. DOH! Но ваш метод кажется разумным вариантом. Спасибо – pieterk

+0

Это достойное решение, спасибо! Одно предупреждение о имени модуля. Я использую python 3.6 с Django 1.11, и, как оказалось, для этого требуется абсолютный путь к модулю вместо относительного 'ROOT_URLCONF = '{{project_name}}. Urls'', поэтому в файлах настроек нужно иметь' project_name', например. 'Xxx.urls.local' –