@butroskali

Почему Django views 'не видит' файлы в директории проекта?

Есть вот такая структура джанго проекта:
- project
--- static - папка_с_csv
--- function.py
--- views.py

В function.py скрипт из трех функций 1-я делает insert в db в качестве аргумента принимая csv файл который лежит в папке с проектом, вторая делает то же самое, но для другой таблицы, 3 фнкция запускает в цикле(количество тактов которого зависит от количесва csv файлов в папке)вызывает первые две функции и делая запрос к базе добавляя результаты его выполнения в список, после чего возвращает список.
Код function.py :
import pandas as pd
import psycopg2
import os, glob


conn = psycopg2.connect(host='ip_address, database='unicorn',
                        user='user', password='password')
cur = conn.cursor()


def insert_data_as_is(file_name):

    cur.execute('truncate table test_inv.start_tbl')
    with open(file_name, 'r') as file:
        cur.execute("insert into test_inv.start_tbl values {0}".format(file.read()))
        conn.commit()


def insert_data_to_be(file_name):

    cur.execute('truncate table test_inv.res_calc_ratios_t')
    with open(file_name, 'r') as file:
        cur.execute('insert into test_inv.res_calc_ratios_t (test_no, test_name, hcode_id, '
                    'hcode_name, hcode_'
                    'unit_name,'
                    ' org_id, dor_kod, duch_id, nod_id, date_type_id, metric_type_id, cargo_type_id, val_type_id,'
                    ' unit_id, dt, value, ss, dir_id, kato_id, vids_id) values {0}'.format(file.read()))
        conn.commit()



p_s = './static/csv_s/as_is/'
path_start = os.path.dirname(p_s)
start_list = []
p_f = './static/csv_s/to_be/'
path_finish = os.path.dirname(p_f)
finish_list = []
for infile in glob.glob(os.path.join(path_start, '*.*')):
    start_list.append(infile)
for infile in glob.glob(os.path.join(path_finish, '*.*')):
    finish_list.append(infile)


def summoner():
    fun_sql_set = []
    fun_query = """select * from test_inv.test_ratios('1','15')"""
    for i in range(len(finish_list)):
        print(finish_list[i])
        insert_data_as_is(start_list[i])
        insert_data_to_be(finish_list[i])
        results = pd.read_sql_query(fun_query, conn)
        fun_sql_set.append(results)
    return fun_sql_set

Функция summoner вызывается из views чтобы результат ее выполнения был добавлен в html шаблон, но данная функция возращает пустой список. Если вызвать функцию summoner из файла она отбратывает корректно и возвращает список полный. в свизи с этим думаю что django не имеет доступа к файлам, сейчас путь к ним прописан следущию образом, подскажите насколько это корректно?
p_s = './static/csv_s/as_is/'
path_start = os.path.dirname(p_s)
start_list = []
p_f = './static/csv_s/to_be/'
path_finish = os.path.dirname(p_f)
finish_list = []
for infile in glob.glob(os.path.join(path_start, '*.*')):
    start_list.append(infile)
for infile in glob.glob(os.path.join(path_finish, '*.*')):
    finish_list.append(infile)


views.py
from django.shortcuts import render
from . import function



def index(request):

    return render(request,'calculus/index.html')



def output(request):
     data = function.summoner()
     print(data)

    return render(request,'calculus/index.html',{'data':data})
  • Вопрос задан
  • 1339 просмотров
Решения вопроса 1
Tomio
@Tomio
backend developer (python, php)
Попробуйте заменить относительный путь к папке
p_s = './static/csv_s/as_is/'
path_start = os.path.dirname(p_s)
p_f = './static/csv_s/to_be/'
path_finish = os.path.dirname(p_f)

на абсолютный
cur_dir = os.path.dirname(os.path.abspath(__file__))
path_start = '{}/static/csv_s/as_is/'.format(cur_dir)
path_finish = '{}/static/csv_s/to_be/'.format(cur_dir)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы