当前位置: 首页 > 面试题库 >

STATICFILES_DIR,STATIC_ROOT和MEDIA_ROOT之间的差异

陈兴朝
2023-03-14
问题内容

这三个静态网址有什么区别?

我不确定自己是否正确,我使用MEDIA_ROOT来存储上传的照片(通过models.ImageField()

但是,我在admin和中创建了一个JS脚本admin.py。我将媒体定义如下:

....
class Media:
      js = ('/admin/custom.js', )

和我的settings.py

 ....
 STATIC_ROOT = "/home/user/project/django1/top/listing/static"

我添加了custom.jsSTATIC_ROOT/admin/custom.js,但它不工作。抛出404找不到错误。

然后我将更STATIC_ROOT改为STATICFILES_DIRS,它可以正常工作!

....
STATICFILES_DIRS = "/home/user/project/django1/top/listing/static"

所以,我不明白这里发生了什么。实际上,我只是不了解STATIC_ROOT和之间的区别STATICFILES_DIRS

目前,我正在通过virtualenv在我的机器上html" target="_blank">测试Django,但尚未部署,这是原因STATIC_ROOT吗?


问题答案:

你可以在Django文档中找到这些设置。这是文档中我自己的定义和引用:

  • MEDIA_ROOT是用来上传文件的文件夹FileField

存放用户上传文件的目录的绝对文件系统路径。

  • STATIC_ROOT是使用后将存储静态文件的文件夹 manage.py collectstatic

  • collectstatic将收集静态文件以进行部署的目录的绝对路径。

如果staticfiles启用了contrib应用程序(默认),则collectstatic管理命令会将静态文件收集到该目录中。有关用法的更多详细信息,请参见有关管理静态文件的方法。

  • STATICFILES_DIRS是文件夹列表,Django将在其中搜索static安装的每个应用程序的文件夹之外的其他静态文件。

此设置定义了FileSystemFinder启用查找程序后staticfiles应用程序将遍历的其他位置,例如,如果你使用collectstaticfindstaticmanagement命令或使用静态文件服务视图。

在设置中,你应该具有:

MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

# Make a tuple of strings instead of a string
STATICFILES_DIRS = ("/home/user/project/django1/top/listing/static", )

…哪里:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

settings.py现在在默认Django中定义。



 类似资料:
  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 问题内容: 我正在使用Django 1.3,并且意识到它具有collectstatic命令,可将静态文件收集到STATIC_ROOT中。在这里,我还有一些其他全局文件需要使用STATICFILES_DIR提供。 我可以让他们使用相同的目录吗? 问题答案: 否。实际上,该文件甚至会对此进行检查并在执行此操作时引发异常: “ 设置不应包含设置” 该可以包含其他目录(不一定是应用程序的目录)与静态文件和

  • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?

  • 问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(

  • 我正在通过做微控制器项目来自学C++。我当前的项目是使用一对或Adafruit羽毛分组无线电。无线电数据包的库函数需要一个C样式的字符串(我相信),我理解它是一个char的数组。 我已经设置了一个枚举来反映接收方的各种操作,并希望将该状态发送回发送方。所以我想把枚举变成char的数组。 在搜索将枚举转换为char数组的方法时,最简单的方法(对我来说)是将枚举变量传递给带有switch语句的函数,该

  • 我是Hadoop的新手。我正在浏览专业Hadoop解决方案的书,以获得一些关于Hadoop和生态系统的知识。我想澄清HDFS和HBase之间的主要区别是什么。我理解的方式就像两者都是存储系统。它们的区别只是在访问数据方面。HBase通过非关系型数据库访问数据,HDFS使用计算框架(MapReduce)处理数据。如果是这种情况,为什么我们不能只有一个存储HDFS或HBase。根据需求,他们将插入和插