mpl*_*lis 7 python django heroku
我已经在这里尝试了解决方案,它对我不起作用.我正在创建一个基于Heroku"入门"项目的Python项目.
在views.py
,我希望能够访问该文件static/data/
夹中的文件.但是,我为创建文件的正确URL所做的大部分尝试都失败了.唯一有效的方法是将文件的绝对路径放在我本地文件系统上,因为当我部署应用程序时,这显然无效.
以前尝试打开该文件包括:
from django.templatetags.static import static
url = static('data/foobar.csv')
os.path.isfile(url) # False
from django.conf import settings
url = os.path.join(settings.STATIC_URL, 'data/foobar.csv')
os.path.isfile(url) # False
Run Code Online (Sandbox Code Playgroud)
这是我的目录结构:
/appname
/app
/templates
views.py
/appname
/static
/js
/css
/data
settings.py
urls.py
Run Code Online (Sandbox Code Playgroud)
settings.py:
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app'
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'appname.urls'
WSGI_APPLICATION = 'appname.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
DATABASES['default'] = dj_database_url.config()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
ALLOWED_HOSTS = ['*']
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
Run Code Online (Sandbox Code Playgroud)
与其STATIC_ROOT
使用文件名加入,不如使用staticfiles_storage接口。这也可以用于远程静态文件,例如S3 / django-storages。
from django.contrib.staticfiles.storage import staticfiles_storage
url = staticfiles_storage.url('data/foobar.csv')
Run Code Online (Sandbox Code Playgroud)
随着staticfiles_storage
你也可以做简单的文件操作,如打开,删除,保存。
您配置的特定静态文件存储后端将同时提供path
方法和url
方法。
from django.contrib.staticfiles.storage import staticfiles_storage
p = staticfiles_storage.path('data/foobar.csv')
content = p.readlines()
# manipulate content
Run Code Online (Sandbox Code Playgroud)
该.url
方法返回的值与Django的静态内置值相同
url = static('data/foobar.csv')
Run Code Online (Sandbox Code Playgroud)
当您将 Django 应用程序部署到 Heroku 时,或者当您手动运行manage.py collectstatic
任务时,所有静态资产都将复制到您的STATIC_ROOT
目录中。因此,您应该使用:
file_path = os.path.join(settings.STATIC_ROOT, 'data/foobar.csv')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14171 次 |
最近记录: |