我不知道什么是表达这个问题的最佳方式,但我注意到,如果我在项目目录中说这个文件:
a.皮
import logging
import track
from raven.contrib.django.raven_compat.models import client
from django.conf import settings
from .MetricLogger import log_metrics
_LOG = logging.getLogger('application')
class TrackingClass(track.SubClass):
def record(self, *args, **kwargs):
try:
metrics = {
"metric": 'something',
"trigger": 'request',
"element": 'request'
}
# log_metrics(None, metrics)
except Exception:
client.captureException()
track.tracker.register(EventsappTrackingPixel) # this line gets called at some point without importing this module
print语句被调用了。发生了什么,是什么触发了它?这是需要做的类索引的一部分还是它是如何工作的?
编辑:原来我们依赖的曲目包是专门在根目录中查找这个文件名并导入它的!
2条答案
按热度按时间3duebb1j1#
Django不会自动导入目录中的所有文件,它只会自动导入特定的预定义文件(如果它们存在的话),比如models.py和apps.py。
如果目录中有其他自定义模块,如profanityDetector.py,则需要手动导入它们,可能是在apps.py中。
注意,在Django中,每个工作进程只导入一次所有模块,这意味着如果你没有手动从另一个模块导入
a.py
,那么它必须已经通过Django的日志系统注册为回调函数,可能是由于路径或目录混淆。hl0ma9xz2#
对
print
的调用不是类定义的一部分,而是在模块级别,因此在导入模块时执行。您可以通过检查调用堆栈来找出是什么触发了导入,请在
print
调用之后(或之前)插入以下两行代码: