这篇文章将为大家详细讲解有关怎么在Django中整合Vue项目,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
随着Vue的流行,很多人想要在自己的Django项目中使用Vue,而大多数都是更改Vue的"{{ data }}",来避免与Django的template数据冲突问题。 其实有更好的方法,直接在Django中使用Vue/Cli
删除Django的templates文件夹
使用Vue在Django项目下创建一个templates的项目
在settings.py中修改TEMPLATES
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates']
在项目的urls.py中加入
from django.views.generic.base import TemplateView from django.urls import path, re_path urlpatterns = [ path('', TemplateView.as_view(template_name='dist/spa/index.html')), re_path('^css/.*$', views.css, name='css'), re_path('^js/.*$', views.js, name='js'), re_path('^fonts/.*$', views.fonts, name='fonts') ]
在项目views.py中加入
from django.http import StreamingHttpResponse from django.conf import settings from wsgiref.util import FileWrapper import mimetypes async def css(request): path = str(settings.BASE_DIR) + '/templates/dist/spa' + request.path_info content_type, encoding = mimetypes.guess_type(path) resp = StreamingHttpResponse(FileWrapper(open(path, 'rb')), content_type=content_type) resp['Cache-Control'] = "max-age=864000000000" return resp async def js(request): path = str(settings.BASE_DIR) + '/templates/dist/spa' + request.path_info content_type, encoding = mimetypes.guess_type(path) resp = StreamingHttpResponse(FileWrapper(open(path, 'rb')), content_type=content_type) resp['Cache-Control'] = "max-age=864000000000" return resp def fonts(request): path = str(settings.BASE_DIR) + '/templates/dist/spa' + request.path_info content_type, encoding = mimetypes.guess_type(path) resp = StreamingHttpResponse(FileWrapper(open(path, 'rb')), content_type=content_type) resp['Cache-Control'] = "max-age=864000000000" return resp
在项目__init__.py中加入
import mimetypes mimetypes.add_type("text/css", ".css", True) mimetypes.add_type("text/javascript", ".js", True)
1,2,3步骤是让django在templates里面去寻找html
第四步写个path,因为Vue打包出来的项目会在templates/dist下面,使用TemplateView是让Django直接展示这个index.html,为何我的是SPA,因为我设定打包出来的文件夹是SPA,即templates/dist/spa/index.html,这个根据你们自己的index.html路径去修改就好了
第四步写个re_path,是因为vue打包出来的项目,静态文件路径和django的静态文件路径不同,例如“127.0.0.1:8088/static/xxx.js"是django的静态文件路径,而"127.0.0.1:8088/xxx.js"是Vue打包出来的页面的静态文件路径,所以需要写个url去找到这些文件
第五步是在views.py中找到这个静态文件文件的路径,然后然后读取,再以流传输的形式传给前端,一定要加max-age,这样前端就会缓存下来
第六步是启动项目的时候,初始化css和js文件,因为有时候,css和js文件会被读成text文件,这样就会前端报错,所以在初始化的时候,就需要把这些后缀的文件再定义一遍。
这样一套下来,你就可以在templates文件夹里面写vue,在项目文件夹下面写django了,希望这套方案可以完美的解决你们现在遇到的问题。
关于“怎么在Django中整合Vue项目”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。