在django视图函数中读取文件

时间:2013-11-04 06:06:13

标签: django django-forms django-views

编辑回应评论和回答:

我是django和web开发的新手,我觉得我遗漏了一些关于如何使用django视图的基本知识。

我有一个django应用程序,我按照django教程中的说明设置:here。具体来说,我最终得到了自动生成的目录和文件结构:

mysite/
  manage.py
  settings.py
  urls.py
  myapp/
    models.py
    views.py
    templates/
      *.html
    static/
      *.css

在我的应用程序中,我从模板表单中收到一些用户输入,并将其保存在我的模型中的views.py函数中。

在此之前我想运行一些函数来检查输入 - 取决于它是什么我决定是否以及将它放在数据库中的位置以及接下来要向用户显示的内容。

例如,我想做的一件事就是检查输入的单词是否在字典中。我在文本文件中有一个单词列表,我想检查输入中的单词是否在该列表中。

我希望能够做到这样的事情:

wordlist = set(w.strip() for w in open(filename).readlines())

我应该在哪里放置此文本文件,如何在views.py中引用它(以便打开它)?我应该在哪里放置那行代码 - 有没有办法只使这个set一次,然后在任何用户提交输入时访问它?

请注意,我尝试将文本文件放在myapp/中,然后执行open(filename)但我收到错误:

IOError No such file or directory

我还尝试将文件放在static/中,然后执行open(STATIC_URL + filename)但我收到错误:

NameError Name 'STATIC_URL' is not defined

但我确实有from django.contrib import staticfiles因此定义。

2 个答案:

答案 0 :(得分:1)

这是一篇非常古老的文章,但是我正在做类似的事情,这是我如何在Django view.py中读取文本内容的解决方案

import os

def your_view_function(request):
    module_dir = os.path.dirname(__file__)   #get current directory
    file_path = os.path.join(module_dir, 'data.txt')   #full path to text.
    data_file = open(file_path , 'rb')   #I used'rb' here since I got an 'gbk' decode error
    data = data_file.read()
    # print("data=", data)
    return whatever_you_need

答案 1 :(得分:0)

Django只是Python。关于访问Django中的文件没有特殊的规则,就像使用任何其他Python脚本一样。

您没有提供open(filename)无效的任何示例或原因。假设filename是一个绝对路径,并且Django正在运行的用户有权打开该文件,它肯定会起作用。 (尽管请注意,在涉及多用户网站时,依赖于打开文件可能不是最佳设计。)