2015-07-02 4 views
0

Я хотел был бы иметь возможность изменить адрес электронной почты отправителя от администратора. Тем не менее, адрес отправителя по умолчанию указан в settings.py с DEFAULT_FROM_EMAIL.Настройки Django - динамическое значение для DEFAULT_FROM_EMAIL

Что такое хороший подход к достижению этого?

Edit:
Основная проблема здесь состоит в том, что DEFAULT_FROM_EMAIL используются сторонними приложениями, включенных в моем проекте, и я хотел бы избежать баловаться с их кодом, по понятным причинам ...

ответ

0

не проверял это, но я думаю, что это может быть способ пойти об этой конкретной проблемы. Это, кажется, довольно трюк. Комментарии приветствуются!

from UserString import UserString 

def get_dynamic_sender(): 
    return "Sender A" # expand here... 

class DynamicEmailValue(UserString): 
    _data = None 
    @property 
    def data(self): 
     return self._data.format(name=get_dynamic_sender()) 
    @data.setter 
    def data(self, value): 
     self._data = value 

Экземпляры этого класса ведут себя как обычные строки:

>>> DEFAULT_FROM_EMAIL = DynamicEmailValue('{name} <[email protected]>') 

>>> DEFAULT_FROM_EMAIL 
'Sender A <[email protected]>' 

>>> "sent by " + DEFAULT_FROM_EMAIL + " two days ago" 
'sent by Sender A <[email protected]> two days ago' 

>>> "from: {}".format(DEFAULT_FROM_EMAIL) 
'from: Sender A <[email protected]>' 

>>> "from: %s" % DEFAULT_FROM_EMAIL 
'from: Sender A <[email protected]>' 

>>> dynamic_sender = "Sender B" 

>>> "from: %s" % DEFAULT_FROM_EMAIL 
'from: Sender B <[email protected]>' 

Примечание:

  • Работает только в Python 2.x
  • Не 100% тестирование с Джанго (настройки могут быть кэшированы в некоторых местах и ​​т. д.)
  • Назначение нового значения после инициализации (DEFAULT_FROM_EMAIL = 'new value') делает все беззвучное, если новое значение также не содержит {name}. Но настройки не должны записываться, поэтому этого, вероятно, не произойдет ... надеюсь ... да ...
0

Дон 't используйте settings.py для динамических настроек. Существует большое приложение для этого:

+0

Приятное приложение, но я не думаю, что оно переопределяет значения в settings.py. Я бы хотел использовать его, но дело в том, что DEFAULT_FROM_EMAIL используется другими приложениями, например. contrib.auth и некоторые другие, поэтому мои варианты ограничены. – frnhr

+0

Нет, это не переопределяет значения в 'settings.py'. Я не думаю, что вы можете обновить эти параметры во время выполнения (если вы его протестируете, имейте в виду, чтобы использовать производственные настройки). Я понимаю, что вы не хотите связываться с другими приложениями, но изменение электронных писем не так сложно, и вы, возможно, захотите их персонализировать в какой-то момент ... –