Как найти файл, соответствующий конкретному модулю python? - PullRequest
0 голосов
/ 03 марта 2019

Когда программа на python3 использует модуль «m», какую строку я могу написать, чтобы напечатать расположение файла, содержащего исходный код «m»?

В моем конкретном примере я учусьDjango, прочитав исходное приложение (django-wiki), которое содержит следующую строку:

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

Я хочу изменить файл, содержащий wiki.urls (я клонировал django, поэтому я предполагаю, что у меня есть файлгде-то).Я думал, что нашел его (src / wiki / urls.py), но потом я понял, что этот файл в основном содержит функции совместимости, и мои изменения не имели никакого эффекта.Поэтому я пытаюсь увидеть, куда именно Python отправляется, чтобы найти "wiki.urls".Я использовал find и grep для поиска частей URL, которые должны быть определены в wiki.urls (например, «регистрация»), но это только возвращает этот файл «совместимости».

1 Ответ

0 голосов
/ 04 марта 2019

edit : краткий и уточняющий ответ

Быстрый ответ:

В вашем случае строка urlpatterns += url(r'', include('wiki.urls')) добавляет URL-путь для Django для оценки для некоторого приложения«вики».Исходный код для файла 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) и включает в себя URL-адреса, определенные в get_urls (строка 51).Здесь, в get_urls (и в предыдущих строках), вы захотите добавить свой собственный код к другим шаблонам, представлениям и приложениям URL.

Однако эти настройки становятся устаревшими, см. здесь в документах.Итак, копаясь в Git для проекта, вы можете увидеть, что у них переопределено это для современного Django.Итак, в wiki.sites.py см. Строку 75 и далее, чтобы узнать, как создаются экземпляры URL.

Вы также спросили, где была регистрация?Проверьте строку 94 в wiki.sites.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...