如何在django的view方法中定义文件路径views.py

inkz8wg9  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(160)

我需要在view方法中读取CSV文件。这是我在django项目www.example.com中的视图方法views.py:

def myfile(request):
    csv_fp = open('file.csv', 'r')
    reader = csv.DictReader(csv_fp)
    headers = [col for col in reader.fieldnames]
    out = [row for row in reader]
    return render(request, 'myfile.html', {'data' : out, 'headers' : headers})

字符串
这是在我的urls.py:path('myfile/', views.myfile, name='myfile'),
我的Django版本是:3.2.2
我尝试了很多方法在csv_fp = open('file.csv', 'r')中打开文件。
我在我的views.py中使用了以下方法,但没有一种有效:
我的文件在静态目录:

csv_fp = open('static/file.csv' , 'r')    # not working
csv_fp = open('file.csv' , 'r')    # not working

的数据
我在我的views.py中添加了以下行,但它并不起作用:

import csv, os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
file_path = os.path.join(STATIC_ROOT, 'file.csv') 
csv_fp = open(file_path , 'r')


这是错误消息:
异常位置:/home/djangoir/virtualenv/project/3.7/lib/python3.7/site-packages/django/template/loader.py,line 19,in get_template
关键是我不想为数据库生成模型并将CSV文件导入数据库。我只需要以某种方式读取文件并在render方法中将其数据导出到字典中。

iqxoj9l9

iqxoj9l91#

记住:运行应用程序的是manage.py文件。因此,每个文件路由都必须相对于manage.py文件进行。
你需要一个类似这样的文件结构:

my_project/
    my_app/
        static/
        files/
            file.csv
        admin.py
        apps.py
        forms.py
        models.py
        ...
    my_project/
        __init__.py
        wsgi.py
        settings.py
        ...
    manage.py

字符串
然后,您的视图可以是:

import os

def myfile(request):
    fp = os.path.join("my_app/files/file.csv")
    csv_fp = open(fp, 'r')
    reader = csv.DictReader(csv_fp)
    headers = [col for col in reader.fieldnames]
    out = [row for row in reader]
    return render(request, 'myfile.html', {'data' : out, 'headers' : headers})


我会尽量避免将它连接到您的静态文件。静态文件的点是直接由您的服务器/代理服务器提供服务(例如nginx),但如果我理解正确的话,你不希望这样。而不是直接服务,不修改用户,你想“做的东西”与读取csv文件第一。

相关问题