jsa*_*ezs 2 django azure django-staticfiles azure-web-app-service
在 Azure webapp 上获得了我的 Django 项目,但是当我调用 SSH 终端时:
Python manage.py collectstatic
它说复制了 252 个文件,但我的静态文件在我的模板上不可见,wwwroot 中的静态文件夹是空的...这是我的 wwwroot 结构:
wwwroot
|---Myproject
|---manage.py
|---oryx-manifest.toml
|---hostingstart.html
|---static //With all my static files
??? myapp
? ??? migrations
? ??? __pycache__
? ??? static
| | |---Images
| | | |--myimage.png
| | | |--myimage2.png
? ??? templates
Run Code Online (Sandbox Code Playgroud)
这是我的settings.py:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
('myapp', os.path.join(BASE_DIR, 'myapp', 'static')),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Run Code Online (Sandbox Code Playgroud)
知道为什么或我做错了什么吗?Azure 收集不同吗?
编辑> 当我访问我的网站时,我的图像不显示......我在模板上这样称呼它们:
{% load static %}
<img src="{% static 'Images/myimage.png' %}" /><br>
Run Code Online (Sandbox Code Playgroud)
编辑 2 /////
在 wwwroot 中确实创建了一个包含我所有静态数据的文件夹,但是当我加载我的模板时,它们没有显示,在 wen 控制台中,我收到 myimage.png 和 myimage2.png 的此错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)
小智 9
Django 在生产模式下不提供静态文件。
它提供静态文件的唯一时间是当您在开发模式下设置 DEBUG = True 时,不建议在生产设置中这样做。
Django 建议通过 CND 或任何其他网络服务器提供静态文件。但是,如果您的网站很小并且流量不大,您可以使用 Django Whitenoise 提供静态文件,具体方法如下。
以下解决方案适用于 python 3.7 和 Django 3.2
第1步:安装白噪声包
pip install whitenoise
Run Code Online (Sandbox Code Playgroud)
第 2 步:确保您的 BASE_DIR 如下所示
BASE_DIR = Path(__file__).resolve().parent.parent
Run Code Online (Sandbox Code Playgroud)
第 3 步:将这些添加到您的 settings.py 中。如果出现任何错误,请尝试注释掉 STATICFILES_STORAGE 并检查
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)
第 4 步:WhiteNoise 中间件应直接放置在 Django SecurityMiddleware 之后(如果您正在使用它)和所有其他中间件之前
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
Run Code Online (Sandbox Code Playgroud)
第 5 步:确保这是您在模板中引用静态文件的方式(另请检查您是否{% load static %}在模板中提到过
<link rel="stylesheet" type="text/css" href="{% static 'appname/styles.css' %}">
Run Code Online (Sandbox Code Playgroud)
第 6 步:运行收集静态数据
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
第 7 步:将 DEBUG = False 并运行服务器以验证其是否正常工作。
一些额外的资源供进一步阅读:
Azure 上的白噪声
Django - 超越“hello world”
找到了 !!
只需要添加这个: + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 到这样的 url 模式:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('myapp/', include('myapp.urls')),
path('admin/', admin.site.urls),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Run Code Online (Sandbox Code Playgroud)
它成功了,希望对其他人有帮助!!
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |