Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到与特定python模块对应的文件?_Python_Django_Python 3.x - Fatal编程技术网

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

如何找到与特定python模块对应的文件?,python,django,python-3.x,Python,Django,Python 3.x,当python3程序使用模块“m”时,我可以写哪一行使其打印包含“m”源代码的文件的位置 在我的具体示例中,我通过阅读应用程序(Django wiki)的源代码来学习Django,其中包含以下行: urlpatterns += url(r'', include('wiki.urls')) 我想修改包含wiki.url的文件(我克隆了django,所以我假设我在某处有这个文件)。我以为我找到了它(src/wiki/url.py),但后来我意识到这个文件主要包含兼容函数,我的更改没有任何效果。因此

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

在我的具体示例中,我通过阅读应用程序(Django wiki)的源代码来学习Django,其中包含以下行:

urlpatterns += url(r'', include('wiki.urls'))
我想修改包含wiki.url的文件(我克隆了django,所以我假设我在某处有这个文件)。我以为我找到了它(src/wiki/url.py),但后来我意识到这个文件主要包含兼容函数,我的更改没有任何效果。因此,我试图了解python到底在哪里找到“wiki.url”。我使用find和grep查找应该在wiki.url中定义的部分URL(例如,“signup”),但这只返回这个“兼容性”文件。

编辑:简洁明了的答案

快速回答: 在您的例子中,行
urlpatterns+=url(r'',include('wiki.url'))
正在为Django添加url路径,以便为某些应用程序“wiki”进行评估。 如果其他人看到此问题,请参阅url.py文件的源代码

长答覆: 在wiki.url.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.url.py)。 从上面的部分中,您可以看到conf.settings默认将URL\u CONFIG\u类定义为
None
。然后,
if None
url配置文件将该类定义为WikiURLPatterns(第249行),并包括get_url(第51行)中定义的url。它将出现在get_URL(以及前面的几行)中,您可能希望将自己的代码添加到其他URL模式、视图和应用程序中

但是,这些设置正在贬值,请参见文档中的。所以,在Git中为这个项目挖掘,你可以看到他们为现代Django提供了这个。因此,在wiki.sites.py中,URL的实例化方式见第75行


你还问过注册在哪里?检查wiki.sites.py

@amstagram中的第94行,我可能会检查该应用程序是否在设置中注册为wiki或某个别名。检查已安装的应用程序。另外,请看我对上面答案的补充。项目结构可能没有通常那么简单,因为它是一个测试项目:
django wiki-->testproject-->testproject-->manage.py-->src-->wiki-->urls.py
上面的文件urls.py确实是由runserver运行的(我尝试添加了一些debbug输出),并向urlpatterns添加一个条目,但仅当调用了兼容函数“get_pattern”时。这个函数实际上不是由runserver调用的,修改该条目不会起任何作用。这就是为什么我想知道如何获取python找到“wiki.url”的实际位置。答案编辑中的文件实际上是src/wiki/url.py(我今天克隆的版本有一个额外的get\u模式折旧警告)。但它定义URL模式(例如“\u accounts/sing up”)的唯一时间是调用get\u模式。@amstamgram更新了答案!一开始我自己都没看到。假设很傻,但只要看一眼就很容易错过。他们已经将URL更新为“使用与Django管理员默认站点相同的策略”已解决,谢谢!在搜索“注册”时,我不应该将自己限制在名为url.py的文件中。现在再看看wiki/urls.py,我看到了这两行:
来自wiki导入站点
然后
urlpatterns=[url(r'^',sites.site.url),]
,这应该将我指向wiki/sites.py。