Django会执行项目目录下的所有python文件吗?

3qpi33ja  于 2023-02-05  发布在  Go
关注(0)|答案(2)|浏览(124)

我不知道什么是表达这个问题的最佳方式,但我注意到,如果我在项目目录中说这个文件:

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语句被调用了。发生了什么,是什么触发了它?这是需要做的类索引的一部分还是它是如何工作的?

编辑:原来我们依赖的曲目包是专门在根目录中查找这个文件名并导入它的!

3duebb1j

3duebb1j1#

Django不会自动导入目录中的所有文件,它只会自动导入特定的预定义文件(如果它们存在的话),比如models.py和apps.py。
如果目录中有其他自定义模块,如profanityDetector.py,则需要手动导入它们,可能是在apps.py中。
注意,在Django中,每个工作进程只导入一次所有模块,这意味着如果你没有手动从另一个模块导入a.py,那么它必须已经通过Django的日志系统注册为回调函数,可能是由于路径或目录混淆。

hl0ma9xz

hl0ma9xz2#

print的调用不是类定义的一部分,而是在模块级别,因此在导入模块时执行。
您可以通过检查调用堆栈来找出是什么触发了导入,请在print调用之后(或之前)插入以下两行代码:

import traceback
traceback.print_stack()

相关问题