我們首先簡要來看下Django2與@Vue/Cli3如何整合
- 創建Django2項目
通過django-admin startproject mysite
命令創建 - 創建後端服務app
cd mysite
目錄後,django-admin startapp backend
- 創建vue項目
vue create frontend
通過三個步驟後,我們可以看到在mysite
目錄下存在frontend
,backend
,manage.py
,db.sqlite3
平級目錄。
下面就是django的配置,打開settings.py
(在backend
目錄下)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['frontend/dist'], # 主要是這行
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
STATIC_URL = '/static/'
添加這行
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "frontend/dist"),
]
urlpatterns = [
path('admin/', admin.site.urls),
path('', TemplateView.as_view(template_name='index.html')), # 添加這行
]
下面就npm run build
,在frontend
下會生成dist
目錄,起django項目,python manage.py runserver
,訪問http://127.0.0.1:8000
,驚奇的發現,首頁index.html
是可以訪問,但是綁定的靜態文件全都404
發現問題
爲啥會404,我們先看下index.html
的文件
截取其中一段
<link href=/css/login.d7cd78d9.css rel=prefetch>
按這個相對路徑看,index.html
與css
是同級目錄,那href
不是應該是./css/login.d7cd78d9.css
(多個點),修改,重新運行,發現還是404.
我們再看看django訪問靜態文件的配置,是訪問dist
目錄下似乎沒毛病,但是我們忘記了還有STATIC_URL
是訪問帶static
文件夾的,官方文檔
解決問題
在frontend
目錄下創建vue.config.js
module.exports = {
assetsDir: 'static', #指定`build`時,在靜態文件上一層添加static目錄
};
接下來就是重新build(index.html的引用地址也同步改了),起django,訪問,解決問題