我可以使用 'runserver' 在本地加载静态文件,但不能在生产环境中加载
I can load static files locally with 'runserver' but not in production
我可以使用 'runserver' 在本地加载静态文件,但不能在生产环境中加载。
我成功地设法在生产中加载模板,但没有加载静态文件。
在 .html 页面中,我包含了以下行:
<!DOCTYPE html>
{% load staticfiles %}
...
...
<img src="{% static "images/mypic.jpg" %}" alt="this pic" />
我在 settings.py 中的设置包括这些行
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [STATIC_DIR, ]
STATIC_URL = '/static/'
在 urls.py 我有:
from django.conf.urls.static import static
和
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^pages/', include('pages.urls')),
url(r'^admin/', admin.site.urls),
url(r'about^$', views.about, name='about'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我已经尝试了几个小时了,知道为什么我无法访问它们吗?
(错误!!!)
我通过添加解决了这个问题:
+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
我的应用程序 urls.py 和主应用程序 urls.py
在产品系统中,不建议使用 link 来归档,并且由于 DEBUG=TRUE 可能会工作。
在产品环境中总是更好地使用像 nginx 这样的网络服务器并通过网络服务器加载静态
所以,我的问题是有缺陷的。
正如许多人正确指出的那样,您需要在生产环境中使用网络服务器来提供静态文件(我不知道,因为我没有经验)。
此外,我提出的解决方案非常糟糕,因为您不应该添加该行
+静态(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
问题在于不同的托管服务有不同的设置方式,而且用户通常无法调整 Apache 配置或者设置 nginx 服务器并不容易。解决方案:
简单、美观、完美。
几行代码就可以解决所有问题,而不必为了学习如何编写 Apache/nginx 网络服务器而将头撞到墙上。
使用白噪声你需要做的是:
- 安装 whitenoise 包
按照说明中的说明更改您的 wsgi 应用,添加
from whitenoise import WhiteNoise
...
application = get_wsgi_application()
application = WhiteNoise(application,root='/mypath/static')
更改 settings.py 并在中间件中启用 whitenoise 类
]
运行 collectstatic
python manage.py collectstatic
我做的不是做的是:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
但我将 static_root 路径保留为:
STATIC_ROOT = STATIC_DIR
我不知道为什么,但这样就可以了
我希望这对那些无法在 django 生产环境中提供静态文件的人有用
我可以使用 'runserver' 在本地加载静态文件,但不能在生产环境中加载。 我成功地设法在生产中加载模板,但没有加载静态文件。
在 .html 页面中,我包含了以下行:
<!DOCTYPE html>
{% load staticfiles %}
... ...
<img src="{% static "images/mypic.jpg" %}" alt="this pic" />
我在 settings.py 中的设置包括这些行
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [STATIC_DIR, ]
STATIC_URL = '/static/'
在 urls.py 我有:
from django.conf.urls.static import static
和
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^pages/', include('pages.urls')),
url(r'^admin/', admin.site.urls),
url(r'about^$', views.about, name='about'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我已经尝试了几个小时了,知道为什么我无法访问它们吗?
(错误!!!)
我通过添加解决了这个问题:
+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
我的应用程序 urls.py 和主应用程序 urls.py
在产品系统中,不建议使用 link 来归档,并且由于 DEBUG=TRUE 可能会工作。 在产品环境中总是更好地使用像 nginx 这样的网络服务器并通过网络服务器加载静态
所以,我的问题是有缺陷的。 正如许多人正确指出的那样,您需要在生产环境中使用网络服务器来提供静态文件(我不知道,因为我没有经验)。
此外,我提出的解决方案非常糟糕,因为您不应该添加该行 +静态(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
问题在于不同的托管服务有不同的设置方式,而且用户通常无法调整 Apache 配置或者设置 nginx 服务器并不容易。解决方案:
简单、美观、完美。 几行代码就可以解决所有问题,而不必为了学习如何编写 Apache/nginx 网络服务器而将头撞到墙上。
使用白噪声你需要做的是:
- 安装 whitenoise 包
按照说明中的说明更改您的 wsgi 应用,添加
from whitenoise import WhiteNoise
...
application = get_wsgi_application()
application = WhiteNoise(application,root='/mypath/static')
更改 settings.py 并在中间件中启用 whitenoise 类 ]
运行 collectstatic
python manage.py collectstatic
我做的不是做的是:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
但我将 static_root 路径保留为:
STATIC_ROOT = STATIC_DIR
我不知道为什么,但这样就可以了
我希望这对那些无法在 django 生产环境中提供静态文件的人有用