Как импортировать функцию из другого представления с помощью Django?

У меня есть эта иерархия папок:

|---- saga
    |---- core
         |---- views.py
    |---- study_time
         |---- views.py

На моем study_time/views.py, У меня есть эти функции:

def study_time(request):
    def tasks_subjects(week_day, key):
        #Code here
        return __tasks

    def day_studies(week_day):
        __tasks_subjects = tasks_subjects(week_day, 0)
        #Code here
        return __studies

    return render(request, 'study_time.html', context)

На моем core/views.pyМне нужна функция day_studies(), поэтому я импортирую вот так:

from saga.study_time.views import day_studies
    def home(request):
        day_progress = day_studies(datetime.date.today().isoweekday())

Но я получаю ошибку:

ImportError: невозможно импортировать имя 'day_studies'

Как я могу сделать этот импорт? Я не хочу отвечать на весь код.

2 ответа

Решение

Вы определили вложенную функцию. Это просто не видно за пределами содержащей функции; на самом деле, сделать его невидимым извне - в значительной степени единственная хорошая причина для определения вложенных функций в Python. Не делай этого; переместить его за пределы study_time функция.

(Кроме того, не используйте такие префиксы с двойным подчеркиванием, как этот. Они не имеют никакого смысла вне класса; и даже там вы должны редко, если когда-либо использовать их.)

Внутренняя функция недоступна, потому что это локальный код только для этой функции. Это не универсально для всех в views.py . Так что сделайте различие по этому вопросу.

Пройдите через это для лучшего понимания!! https://realpython.com/blog/python/inner-functions-what-are-they-good-for/

Удачного кодирования!

Другие вопросы по тегам