这三个静态网址有什么区别?
我不确定自己是否正确,我使用MEDIA_ROOT来存储上传的照片(通过models.ImageField())
MEDIA_ROOT
models.ImageField()
但是,我在admin和中创建了一个JS脚本admin.py。我将媒体定义如下:
admin.py
.... class Media: js = ('/admin/custom.js', )
和我的settings.py:
settings.py
.... STATIC_ROOT = "/home/user/project/django1/top/listing/static"
我添加了custom.js到STATIC_ROOT/admin/custom.js,但它不工作。抛出404找不到错误。
custom.js
STATIC_ROOT/admin/custom.js
然后我将更STATIC_ROOT改为STATICFILES_DIRS,它可以正常工作!
STATIC_ROOT
STATICFILES_DIRS
.... STATICFILES_DIRS = "/home/user/project/django1/top/listing/static"
所以,我不明白这里发生了什么。实际上,我只是不了解STATIC_ROOT和之间的区别STATICFILES_DIRS。
目前,我正在通过virtualenv在我的机器上测试Django,但尚未部署,这是原因STATIC_ROOT吗?
你可以在Django文档中找到这些设置。这是文档中我自己的定义和引用:
FileField
存放用户上传文件的目录的绝对文件系统路径。
STATIC_ROOT是使用后将存储静态文件的文件夹 manage.py collectstatic
manage.py collectstatic
collectstatic将收集静态文件以进行部署的目录的绝对路径。
collectstatic
如果staticfiles启用了contrib应用程序(默认),则collectstatic管理命令会将静态文件收集到该目录中。有关用法的更多详细信息,请参见有关管理静态文件的方法。
staticfiles
static
此设置定义了FileSystemFinder启用查找程序后staticfiles应用程序将遍历的其他位置,例如,如果你使用collectstatic或findstaticmanagement命令或使用静态文件服务视图。
FileSystemFinder
findstaticmanagement
在设置中,你应该具有:
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中定义。
发展历程
STATIC_ROOT在开发过程中是无用的,仅在部署时需要。
在开发过程中,STATIC_ROOT什么都不做。你甚至不需要设置它。Django在每个应用程序的目录(myProject/appName/static)中查找静态文件,并自动为其提供服务。
myProject/appName/static
这是manage.py runserverwhen 的魔力DEBUG=True。
manage.py runserver
DEBUG=True
部署方式
当你的项目上线时,情况会有所不同。很可能你将使用Django提供动态内容,而Nginx将提供静态文件。为什么?因为Nginx非常高效,并且可以减少Django的工作量。
这是STATIC_ROOT很方便的地方,因为Nginx对django项目一无所知,也不知道在哪里可以找到静态文件。
因此,你设置STATIC_ROOT = '/some/folder/'并告诉Nginx在中查找静态文件/some/folder/。然后运行manage.py collectstatic,Django将从所有必须复制的应用程序中复制静态文件/some/folder/。
STATIC_ROOT = '/some/folder/'
/some/folder/
静态文件的额外目录
STATICFILES_DIRS用于包括要查找的其他目录collectstatic。例如,默认情况下,Django不识别/myProject/static/。因此,你可以自己添加它。
/myProject/static/
例
STATIC_URL = '/static/' if not DEBUG: STATIC_ROOT = '/home/django/www-data/site.com/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static/'), ]