Django如何在运行服务器时管理静态文件?

时间:2016-10-28 03:22:58

标签: django static-files

我将静态文件放在与静态文件相关的app目录下。

例如,

image.jpg用于exmapleapp下的模板。所以我将image.jpg文件放在目录/project/exampleapp/static/image.jpg

Debug=True设置中,Dajngo通过django.contrib.staticfiles自动查找静态文件。如果您将静态文件放在目录/project/static/中,则可以在settings.py中设置STATICFILES_DIRS = []或在urls.py中添加urlspatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)(如果您想手动提供静态文件)

到目前为止,开发没什么问题吧?但是你要部署,你需要做collectstatic.我现在很困惑。

这是我最初的想法。

第1步:在设置中使用DEBUG = True在本地工作并测试代码。你不断在git repo中保存你的代码。

第2步:您已准备好在服务器中部署代码。您克隆您的repo并设置apache服务器以正确运行django框架(Alias static,WSGI Daemon进程)。你使用apache服务器python manage.py collectstatic来提供静态文件。

第3步:您继续在本地工作以改进您的代码,并将此改进应用于服务器中的代码并进行测试。

我感到困惑并且有疑问。

Q1 :如果您为部署执行collectstatic,则会有静态文件夹(根据STATIC_ROOT设置),其中包含在每个应用程序文件夹中散布的所有静态文件。

你在本地做collectstatic并只发送收集所有服务器的静态文件夹吗?或者您是否根据Apache服务器中的静态别名设置在服务器中执行collectstatic?

Q2 :您是否在本地更改了DEBUG = False和ALLOWED_HOSTS = [服务器IP]并在git repo中保存代码并将其拉入服务器?

好吧,现在我对使用github进行开发工作并使用带有Django设置的github将其部署到服务器感到困惑。

请告诉我你是否能清楚地理解我的问题。

1 个答案:

答案 0 :(得分:1)

您正在使用static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)在开发模式下提供静态文件。但在生产中,(意为DEBUG = False)它将是空列表。 (static返回空列表)。然后 collectstatic ,你可以使用开发或生产。它的目的是将所有静态文件复制到STATIC_ROOT。所以

Q1 :每个人都通过网络服务器(Apache,Nginx)进行生产收集静态文件

Q2 :对于生产和开发,请编写不同的settings文件。你可以在这里看到前How to manage local vs production settings in Django?