Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 动态设置.py_Python_Django - Fatal编程技术网

Python 动态设置.py

Python 动态设置.py,python,django,Python,Django,我把它用作图书馆。 虽然我注意到一件事,当我尝试使用ADMIN和MANAGER CONSTANCE_CONFIG = { 'ADMINS': ([('Errors', 'admin@gmail.com')], 'Admin Emails'), } 发送电子邮件不起作用 在MANAGER中,我尝试了以下方法: MANAGER = CONSTANCE_CONFIG['ADMINS'][0] 仍然发送电子邮件不起作用。我是否错过了一个错误的实现? 或者您可以推荐任何其他可以覆盖settings.p

我把它用作图书馆。 虽然我注意到一件事,当我尝试使用
ADMIN
MANAGER

CONSTANCE_CONFIG = {
'ADMINS': ([('Errors', 'admin@gmail.com')], 'Admin Emails'),
}
发送电子邮件不起作用

在MANAGER中,我尝试了以下方法:

MANAGER = CONSTANCE_CONFIG['ADMINS'][0]
仍然发送电子邮件不起作用。我是否错过了一个错误的实现? 或者您可以推荐任何其他可以覆盖
settings.py
中的
ADMIN
MANAGER
的库。我正在使用Django 1.8.5和Python 3

另外,在尝试导入inside settings.py时,它也会产生错误。

1
您可能已经知道,
django constance
不支持元组。基本上,很难专门检测元组的小部件 就你而言。管理员可以
添加/删除
,那么您如何通过
单个小部件
使其成为动态的呢。。!!(想想所有django小部件)。所以这里
CONSTANCE\u其他字段也将不起作用

2
我想你误解了django constance的工作。 它不会刷新您的
django服务器
。因此
MANAGER=CONSTANCE\u CONFIG['ADMINS'][0]
是完全错误的(即使使用
CONSTANCE\u附加字段
)。您可以在此处访问
常量
值(非动态)。 你需要像这样访问它

from constance import config
print(config.ADMINS)
3
默认日志记录配置使用
AdminEmailHandler
类作为
mail\u管理员
,它使用
django设置中的
admins
值,而不是
constance配置

因此,一个可能的解决方案可能是创建您自己的
处理程序
类,该类将使用
管理员
来自
constance config的值。因此,将
设置.py更改为

CONSTANCE_CONFIG = {
    'ADMIN1': ('admin@gmail.com', 'This one will receive error on 500'),
} # you can add as many admins as you want with ADMIN1, ADMIN2 etc(no tuple) 
'mail_admins': {
    'level': 'ERROR',
    'filters': ['require_debug_false'], # change it to require_debug_true if you want to test it locally.
    'class': '<yourproject>.<yourfile>.ConstanceEmailHandler', # path to newly created handler class
    'include_html': True
    },
然后创建自己的处理程序类,该类将使用
CONSTANCE\u CONFIG

from django.utils.log import AdminEmailHandler
from constance import config
from django.conf import settings
from django.core.mail.message import EmailMultiAlternatives


class ConstanceEmailHandler(AdminEmailHandler):
    def send_mail(self, subject, message, html_message=None, fail_silently=False, *args, **kwargs):
        # create a list of ADMIN emails here, if you have more then one ADMIN
        mail = EmailMultiAlternatives('%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
                                  message, settings.SERVER_EMAIL, [config.ADMIN1],
                                  connection=self.connection())
        if html_message:
            mail.attach_alternative(html_message, 'text/html')
        mail.send(fail_silently=fail_silently)
然后更改
记录器
配置。如果您没有自定义的
日志记录设置,我建议您从
django.utils.log
(默认日志记录)复制默认日志记录程序配置。并将邮件管理员更改为

CONSTANCE_CONFIG = {
    'ADMIN1': ('admin@gmail.com', 'This one will receive error on 500'),
} # you can add as many admins as you want with ADMIN1, ADMIN2 etc(no tuple) 
'mail_admins': {
    'level': 'ERROR',
    'filters': ['require_debug_false'], # change it to require_debug_true if you want to test it locally.
    'class': '<yourproject>.<yourfile>.ConstanceEmailHandler', # path to newly created handler class
    'include_html': True
    },
“邮件管理员”:{
“级别”:“错误”,
“过滤器”:[“require_debug_false]”,如果要在本地测试,请将其更改为require_debug_true。
“类”:“…ConstanceEmailHandler”,#新创建的处理程序类的路径
'include_html':True
},

您所说的“发送电子邮件不起作用”是什么意思?有错误吗?谢谢。您正在尝试动态更改django设置吗?你看了吗?@alecxe,我用Admin和Manager在我的电子邮件中发送错误日志,当不使用django constance时,它在电子邮件中发送错误(这是正确的方法),但当我使用django constance时,没有错误,但它不发送我的电子邮件。@PeterBrittain是的,我在这里也尝试了一些,但是似乎找不到让管理员和经理为他们工作的方法。你也看到答案()说你不能更改设置了吗?是的,有一些您可以更改(如对答案的评论中所述),但没有文档记录或支持…如果您希望有多个管理员,如:(('admin1','admin1'),该怎么办admin1@domain),('admin1','admin2@domain.tld'), )您将如何在constance中使用它以及您实现的功能?请仔细阅读答案。在constance配置中添加ADMIN2=(,)。然后在
发送邮件
功能中
[config.ADMIN1,config.ADMIN2]