Django设置 - DEFAULT_FROM_EMAIL的动态值

时间:2015-07-02 18:20:26

标签: django django-settings django-email

我希望能够从管理员更改发件人电子邮件地址。但是,默认发件人电子邮件在settings.py中使用DEFAULT_FROM_EMAIL指定。

实现这一目标的好方法是什么?

编辑:
这里的主要问题是我的项目中包含的第三方应用程序使用了DEFAULT_FROM_EMAIL,并且我希望避免弄乱他们的代码,原因显而易见......

2 个答案:

答案 0 :(得分:0)

请勿使用settings.py进行动态设置。这有一个很好的应用:

答案 1 :(得分: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} <some.mail@example.com>')

>>> DEFAULT_FROM_EMAIL
'Sender A <some.mail@example.com>'

>>> "sent by " + DEFAULT_FROM_EMAIL + " two days ago"
'sent by Sender A <some.mail@example.com> two days ago'

>>> "from: {}".format(DEFAULT_FROM_EMAIL)
'from: Sender A <some.mail@example.com>'

>>> "from: %s" % DEFAULT_FROM_EMAIL
'from: Sender A <some.mail@example.com>'

>>> dynamic_sender = "Sender B"

>>> "from: %s" % DEFAULT_FROM_EMAIL
'from: Sender B <some.mail@example.com>'

注意:

  • 仅适用于Python 2.x
  • 没有100%使用Django进行测试(设置可能会缓存在某些地方等)
  • 初始化(DEFAULT_FROM_EMAIL = 'new value')后为其分配新值会使整个事件静音,除非新值还包含{name}。但是设置不应该被写入,所以这可能不会发生......希望...是啊...