我正在尝试在 azure 上部署我的 Django Web 应用程序。运行良好,
debug = true
。但是在使用settings.py中的debug = False
部署到azure应用程序服务上后,它无法在iframe中加载用户上传的媒体文件,并提示找不到URL。我可以删除和移动媒体文件,但无法在 HTML 中使用 Iframe 进行显示。
这是settings.py:
MEDIA_URL = '/media/' # URL for accessing media files
MEDIA_ROOT = BASE_DIR / 'media' # Directory where files will be uploaded to
这是 urls.py:
urlpatterns+= static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
这是 html:
<iframe src="{{ MEDIA_URL }}{{ row.document.url }}" title="Document View" frameborder="0" width="100%" height="600px"></iframe>
我尝试添加核心标头,但它不起作用。
我尝试将示例 Python Django 应用程序部署到 Azure,并在
DEBUG = False
文件中设置 settings.py
。
成功部署后,我的静态文件无法正常服务,如下所示。
Django 不在生产环境中提供静态或媒体文件。要同时提供静态文件和媒体文件,可以使用 Azure Blob 存储。如果仅提供静态文件,请使用
Whitenoise
。
感谢@medium关于将Django静态和媒体文件上传到Azure Blob存储的清晰解释。
我在 Azure 中创建了一个存储帐户,然后转到“配置”并启用“允许 Blob 匿名访问”,如下所示。
我创建了两个容器,
media
和static
,具有 Blob 匿名访问级别。
我在最后的
settings.py
添加了以下几行代码。
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
AZURE_ACCOUNT_NAME = "<StorageAccountName>"
AZURE_ACCOUNT_KEY = "<StorageAccountKey>"
AZURE_CONNECTION_STRING = "<ConnectionString>"
AZURE_CONTAINER_STATIC = "static"
AZURE_CONTAINER_MEDIA = "media"
STATIC_ROOT = f"https://{AZURE_ACCOUNT_NAME}.blob.core.windows.net/{AZURE_CONTAINER_STATIC}/"
MEDIA_URL = f"https://{AZURE_ACCOUNT_NAME}.blob.core.windows.net/{AZURE_CONTAINER_MEDIA}/"
STORAGES = {
"default": {
"BACKEND": "storages.backends.azure_storage.AzureStorage",
"OPTIONS": {
"azure_container": AZURE_CONTAINER_MEDIA,
"account_name": AZURE_ACCOUNT_NAME,
"account_key": AZURE_ACCOUNT_KEY,
"connection_string": AZURE_CONNECTION_STRING,
},
},
"staticfiles": {
"BACKEND": "storages.backends.azure_storage.AzureStorage",
"OPTIONS": {
"azure_container": AZURE_CONTAINER_STATIC,
"account_name": AZURE_ACCOUNT_NAME,
"account_key": AZURE_ACCOUNT_KEY,
"connection_string": AZURE_CONNECTION_STRING,
}
}
}
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
需求.txt:
Django
django-storages[azure]
azure-storage-blob
AZURE_ACCOUNT_NAME
是存储帐户的名称。您可以在存储帐户的访问密钥部分找到连接字符串和帐户密钥。
进行上述更改后,我在部署后成功提供了静态文件和媒体文件。
Azure 输出:
如果仅提供静态文件,请参阅此 Stack Overflow 线程。