Django里使用open函数

Django里使用open函数

前言

在Django里使用open函数打开一个文件的时候,常常会遇到路径错误的问题。我在Django APP里写了一个爬虫用于为网站提供数据,但是需要打开文件,也就是在这里遇到了路径错误,爬虫本身运行起来是没有问题,但是放到Django里就出现了路径出错的问题。几番查找,终于在Stack Overflow上找到了解决方法,Stack Overflow上提出的问题和我遇到的一模一样,下面就简单翻译介绍下问题内容:

  • 当脚本文件处于foo/myapp/anotherapp目录,被读取文件baz.txt也处于foo/myapp/anotherapp目录时,一般的读取该文件的代码应该是这样写:

    file = open(‘./baz.txt‘)
  • 但是根据你启动Django项目所在的路径的不同,open函数里的参数路径也是不一样的,如:
    $pwd
    /Users/foo
    $python myapp/manage.py runserver

    我们在/Users/foo目录下启动Django项目,open函数会使用foo作为根目录

    $cd myapp
    $pwd
    /Users/foo/myapp
    $python manage.py runserver

    这样的话,则会使用myapp作为根目录

  • 在打开baz.txt文件的时候,对应的open函数参数就要发生改变,分别为
    file = open(‘./myapp/anotherapp/baz.txt‘)

    file = open(‘./anotherapp/baz.txt‘)
  • 那么有什么方法可以解决?我们可以采用读取当前目录,然后拼接的方式统一解决路径问题。
    import os
    module_dir = os.path.dirname(__file__)  # 获取当前目录
    file_path = os.path.join(module_dir, ‘baz.txt‘)
  • 原文地址

原文地址:https://www.cnblogs.com/FZfangzheng/p/8448612.html

时间: 2024-10-06 07:31:03

Django里使用open函数的相关文章

django里上传图片的操作

  在django里图片上传里,分为两种一种是在django的后台上传图片,以数据库的方式上传,另一种是在html页面以表单的方式上传 首先要先安装下这个包 pip install Pillow==3.4.1 setting里需要设置 上传的路径 MEDIA_ROOT=os.path.join(BASE_DIR,'static/media') 在model里要配置数据库 class PicTest(models.Model): pic=models.ImageField(upload_to='b

在父页面和其iframe之间函数回调 父页面回调iframe里写的函数

// @shaoyang  父页面 window['mengBanLogin']={ mengBanArr : new Array(), mengBanLoginSuccess : function(){ console.log('mengbanzhixing'); if(mengBanLogin.mengBanArr.length > 0){ for(var i = mengBanLogin.mengBanArr.length-1; i >= 0; i--){ mengBanLogin.me

Delphi-仿vb里的IIF函数

1 //Delphi 函数-IIF 2 // 实例-ChkValue := IIF(TCheckBox(tsPzJz.Controls[i]).Checked, '1', '0'); 3 function IIF(lExp: boolean; vExp1, vExp2: variant): variant; overload; 4 begin 5 if lExp then 6 Result := vExp1 7 else 8 Result := vExp2; 9 end; Delphi-仿vb里

Django 模板之自定义函数

我们已经知道了在Django的模板里面,可以使用for循环,if判断,接收后台的数据,还可以通过 extends和include来重复使用其他的模板,这一节来学习如何自定义函数. 模板里面有两种方式来自定义函数,分别是simple_tag和 filter方式. simple_tag: 1 首先在app下创建一个templatetags的目录,然后在这个目录下面创建一个py文件,注意这个目录的名字是固定的 2.  然后在这个py文件里面,导入模板类,实例化一个对象register,然后执行一个装饰

优先使用map的find函数而非algorithm里的find函数

今天写leetcode的 Two Sum这题一开始使用vector容器,然后使用algorithm里的find函数进行查找,如下: class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; for(int i=0;i<nums.size();i++) { int left = target - nums[i]; auto dis

python列表里__setslices__方法函数解析a

先看看列表里的__setslice__方法函数的帮助文档 help(list.__setslice__) 帮助文档如下所示: __setslice__(...) x.__setslice__(i, j, y) <==> x[i:j]=y Use of negative indices is not supported. 从帮助文档可以看出这个方法函数可以通过列表切片的方式来使用(运算映射函数).举例说明一下: In [1]: li = range(1, 11) In [2]: li Out[2

在Django中使用F()函数

F()允许Django在未实际链接数据的情况下具有对数据库字段的值的引用.通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交.例如这样 # Tintin filed a news story! reporter = Reporters.objects.get(name='Tintin') reporter.stories_filed += 1 reporter.save()   上述代码中我们先将reporter.stories_filed的值从数据库

调用其它文件里定义的函数

1.Julia code is organized into files, modules, and packages. Files containing Julia code use the .jl file extension. 2.modules 里定义函数可以 export 出来,方便调用. 3.Julia 从哪里找到我自己定义的modules ?(C:\Users\QIANG\.juliarc.jl文件:julia>homedir() 函数) 4.module 命名要遵循什么样的规范?

[C/C++标准库]_[初级]_[使用ctype里的isxxx函数时要注意的事项]

场景: 1. 标准库里的 ctype.h里的函数是用于1个字节的判断的,但是参数却是int, 这样很容易导致误用. isalpha iscntrl isdigit isgraph isprint ispunct isspace isxdigit isalnum islower isupper int isspace( int ch ); 最恶心的是vc++的实现会对超过1字节的值会直接崩溃,gcc不会!!! #if defined (_DEBUG) extern "C" int __c