当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”文件。
答案 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行