我可以使用'runserver'在本地加载静态文件,但不能在生产中加载

时间:2017-03-30 15:20:47

标签: django django-staticfiles

我可以使用'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)

我已经尝试了几个小时,知道为什么我无法访问它们?

3 个答案:

答案 0 :(得分:0)

(WRONG !!!)

我通过添加:

解决了这个问题
i

到我的app urls.py和主urls.py

答案 1 :(得分:0)

在produzion sistem是不明智的使用链接到文件和可能的工作感谢DEBUG = TRUE。 在产品环境中总是更好地使用像nginx这样的网络服务器并通过网络服务器加载静态

答案 2 :(得分:0)

所以,我的问题是有缺陷的。 正如许多人正确地指出你需要在生产中使用网络服务器来提供静态文件(我不知道,因为我没有经验)。

另外,我提出的解决方案非常糟糕,因为你不应该添加这一行     + static(settings.STATIC_URL,document_root = settings.STATIC_ROOT)

问题是不同的托管服务有不同的设置方法,用户通常不可能调整Apache配置,或者设置nginx服务器并不容易。解决方案:

whitenoise

简单,美观,完美的工作。 几行代码和所有问题都得到了解决,而不必试图学习如何编写Apache / nginx网络服务器。

使用whitenoise你需要做的是:

  1. 安装whitenoise包
  2. 按照说明中的说明添加

    更改您的wsgi应用

    from whitenoise import WhiteNoise

    ...

    application = get_wsgi_application() application = WhiteNoise(application,root='/mypath/static')

  3. 更改settings.py并在中间件类中启用whitenoise ]

  4. 运行collectstatic

    python manage.py collectstatic

  5. 我做的做的是:

    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

    但我将static_root路径保持为:     STATIC_ROOT = STATIC_DIR

    我不知道为什么,但这种方式有效

    我希望这对那些无法在django中生产静态文件的人有用