当一个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中定义的urls的一部分(例如,"signup"),但这只返回这个“兼容性”文件。
发布于 2019-03-04 05:07:56
编辑:简洁明了的回答
快速回答:
在您的示例中,urlpatterns += url(r'', include('wiki.urls'))
代码行为Django添加了一个url路径,以评估某些应用程序的'wiki‘。如果其他人正在研究这个问题,那么here就是urls.py文件的源代码。
长长的答案:
在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行)。在get_urls (以及前面的代码行)中,您可能希望将自己的代码添加到其他urls、模式、视图和应用程序中。
但是,这些设置正在折旧,请参阅文档中的here。所以,在这个项目的Git中挖掘一下,你可以看到他们为现代的Django提供了reimplemented。因此,在wiki.sites.py中,关于urls是如何实例化的,请参阅第75行。
你还质疑注册在哪里?检查wiki.sites.py中的第94行
https://stackoverflow.com/questions/54973665
复制相似问题