Как получить доступ к переменной модуля Python, используя строку [django] - PullRequest
9 голосов
/ 19 августа 2011

У меня есть приложение django с модулем "app"
Теперь у этого модуля есть файл с именем "urls.py" , в котором есть переменная с именем "HOME_URL "

Что я пытаюсь сделать?

app_label = "app"
url = __import__(app_label).urls.HOME_URL
print url

Это, очевидно, не работает, но я надеюсь, что вы получили то, что я пытаюсь сделать,Если нет, пожалуйста, прокомментируйте, я отредактирую вопрос, чтобы он содержал больше информации.

Ответы [ 2 ]

9 голосов
/ 12 сентября 2015

Если вы используете Django 1.7+, вы должны использовать import_string.

from django.utils.module_loading import import_string
app_label = "app"
url = import_string("%s.urls.HOME_URL" % app_label)

Кстати, некоторые пояснения по поводу модулей и пакетов Python.

A package - это папка, содержащая файлы, включая один файл с именем __init__.py. Похоже, ваш «модуль приложения» на самом деле является пакетом.

Модуль - это файл .py в пакете. Итак, ваш urls.py на самом деле является модулем.

6 голосов
/ 19 августа 2011

Вы можете использовать import_module для загрузки модуля относительно корня проекта django.

from django.utils.importlib import import_module
app_label = "app"
url = import_module("%s.urls" % app_label).HOME_URL 

Это должно работать в вашем проекте django или в ./manage.py shell.

...