如何找到与特定python模块相对应的文件?

时间:2019-03-03 20:56:36

标签: python django python-3.x

当python3程序使用模块“ m”时,我可以写哪行使其打印包含“ m”源代码的文件的位置?

在我的特定示例中,我正在通过阅读应用程序的源代码(django-wiki)学习Django,其中包含以下行:

urlpatterns += url(r'', include('wiki.urls'))

我想修改包含wiki.urls的文件(我克隆了django,所以我假设我在某个地方有文件)。我以为自己找到了(src / wiki / urls.py),但是后来我意识到这个文件主要包含兼容性功能,而我的更改没有任何效果。因此,我试图查看python到底在哪里可以找到“ wiki.urls”。我使用find和grep查找应该在wiki.urls中定义的部分URL(例如“ signup”),但这只会返回此“ compatibility”文件。

1 个答案:

答案 0 :(得分:1)

编辑:简洁明了的答案

快速解答:

在您的情况下,行urlpatterns += url(r'', include('wiki.urls')) 为Django添加了一个用于评估某些应用程序“ wiki”的URL路径。 如果有人在看这个问题,则urls.py文件的源代码为here

长答案:

wiki.urls.py

# line 51
def get_urls(self):
   ... # gets the root urls & adds all other url patterns
   return urlpatterns

# line 249
def get_pattern(app_name="wiki", namespace="wiki", url_config_class=None):
... # warnings etc...
if url_config_class is None:
    url_config_classname = getattr(settings, 'URL_CONFIG_CLASS', None)
    if url_config_classname is None:
        url_config_class = WikiURLPatterns
    else:
        ... # more warning etc...
        url_config_class = import_string(url_config_classname)
urlpatterns = url_config_class().get_urls()

return urlpatterns, app_name, namespace

,并且在 wiki.conf.settings 中找到

# line 273
#: Dotted name of the class used to construct urlpatterns for the wiki.
#: Default is wiki.urls.WikiURLPatterns. To customize urls or view handlers,
#: you can derive from this.
URL_CONFIG_CLASS = getattr(
    django_settings,
    'WIKI_URL_CONFIG_CLASS',
    None)

因此,您确实找到了正确的文件(src.wiki.urls.py)。 从以上各段中,您可以看到conf.settings默认将URL_CONFIG_CLASS定义为None。然后,if None url conf将类定义为WikiURLPatterns(第249行),并包括在get_urls中定义的url(第51行)。您希望将自己的代码添加到其他url模式,视图和应用程序中的get_urls(和前几行)中。

但是,这些设置已经过时了,请参阅文档中的here。因此,深入研究该项目的Git,您会发现他们对于现代Django具有reimplemented。因此,在wiki.sites.py中,请参见第75行,以了解如何实例化url。

您还质疑注册在哪里?检查wiki.sites.py中的第94行