devrais
@devrais

Как сделать при debug = false?

Хочу сделать чтоб при debug = true был sql lite 3 а при false mysql. Реализовал простым условием. Не понимаю, почему не работает.
if settings.DEBUG = False:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'djangopt_db',
            'USER': 'django',
            'PASSWORD': 'xxxxxx',
            'HOST': '',
            'PORT': '',
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

Ругается
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/django/.djenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 325, in execute
    settings.INSTALLED_APPS
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 57, in __getattr__
    self._setup(name)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 107, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/home/django/.djenv/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 661, in exec_module
  File "<frozen importlib._bootstrap_external>", line 767, in get_code
  File "<frozen importlib._bootstrap_external>", line 727, in source_to_code
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/home/django/projects_list/r/forum/forum/settings.py", line 77
    if DEBUG = False:
             ^
SyntaxError: invalid syntax
(.djenv) django@user:~/projects_list/r/forum$ python manage.py createsuperuser
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/django/.djenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 325, in execute
    settings.INSTALLED_APPS
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 57, in __getattr__
    self._setup(name)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 107, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/home/django/.djenv/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 661, in exec_module
  File "<frozen importlib._bootstrap_external>", line 767, in get_code
  File "<frozen importlib._bootstrap_external>", line 727, in source_to_code
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/home/django/projects_list/r/forum/forum/settings.py", line 77
    if settings.DEBUG = False:
                      ^
SyntaxError: invalid syntax
(.djenv) django@user:~/projects_list/r/forum$ python manage.py createsuperuser
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/django/.djenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 325, in execute
    settings.INSTALLED_APPS
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 57, in __getattr__
    self._setup(name)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/django/.djenv/lib/python3.5/site-packages/django/conf/__init__.py", line 107, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/home/django/.djenv/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 661, in exec_module
  File "<frozen importlib._bootstrap_external>", line 767, in get_code
  File "<frozen importlib._bootstrap_external>", line 727, in source_to_code
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/home/django/projects_list/r/forum/forum/settings.py", line 77
    if settings.DEBUG = False:
                      ^
SyntaxError: invalid syntax
  • Вопрос задан
  • 291 просмотр
Решения вопроса 1
@antonksa
Как вам написали выше, у вас классическая ошибка новичка в синтаксисе, одинарное = это операция присваивания, двойное == это булева операция проверки на эквивалентность. Поэтому необходимо использовать == вместо =, непонятно почему Ваша IDE не показала Вам ошибку. В чем Вы разрабатываете? Лучше всего использовать PyCharm. И еще как заметили выше Python это объектно-ориентированный язык, в котором практически все является объектом. И в него встроено два специальных объекта - True и False. Поэтому для булевых операций считается хорошим тоном использовать проверку на то, является ли объект результата булевого выражения объектом True или False. Т.к. для этого Python всего лишь сравнивает внутренние ссылки id его объектов, то эта операция чуть-чуть быстрее. Пишется это следующим образом:
if DEBUG is False:
    ....
else:
    ....


Но ради полного перфекционизма ветки необходимо поменять местами, а так как if под капотом делает с условием нечто типа bool(условие) то можно написать вот так:
if DEBUG:
    # some code if DEBUG is True
else:
    # some code if DEBUG is False
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Во-первых, в условном выражении нужно использовать знак равенства ==, а не знак присваивания =. Во-вторых, внутри модуля settings не надо писать settings.DEBUG. В-третьих, такая задача обычно решается подключением дополнительного файла настроек, локального для каждого рабочего окружения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы