获取 Django 的静态文件包括在 Vue.js .vue 模板中工作

Posted

技术标签:

【中文标题】获取 Django 的静态文件包括在 Vue.js .vue 模板中工作【英文标题】:Getting Django's staticfiles includes working inside Vue.js .vue templates 【发布时间】:2017-11-03 05:15:21 【问题描述】:

我有一个使用 Vue.js v2 / webpack 构建的 Django SPA。

我希望能够使用 Django 静态模板标签在 Vue.js 模板 .vue 文件中添加对图像等的引用。

现在在我的 base.html Django 模板中:

% load static %
% load render_bundle from webpack_loader %
<html>
   <head>
      <!-- This works fine here! -->
      <link rel="stylesheet" href="% static 'css/test.css' %" />
      ...
   </head>
   <body> 
      <div id="app">
        <!-- Vue.js app gets mounted here -->
      </div>
   </body>
</html>

这当然是我用于 SPA(单页应用程序)的 HTML 页面。

但是当我尝试在我的.vue 模板文件中使用静态标签时:

% static 'js/test.js' %

它不起作用——它永远不会被插值,因为当然 Django 是服务器端的,而 Vue 是客户端的。

我想继续使用静态文件标签(而不是硬链接),因为我为静态文件、媒体甚至本地/暂存/生产环境使用不同的存储后端。

关于如何使用 Django/Vue.js 处理此问题的任何想法?这里有什么好的解决方案可以将静态文件链接到模板客户端?

【问题讨论】:

【参考方案1】:

一个好的解决方案?职责分离。为什么要涉及 Django 模板?您的前端代码可以处理所有渲染。你的后端可以只提供rest api端点。

【讨论】:

这几乎不是答案。你以前用过 Django 吗?映射到静态 url 非常重要。 我现在正在开发一个应用程序——后端的 Django 和前端的 Vuejs。 Django 部分根本不关心渲染。我没有使用任何涉及 Django 模板、静态文件等的东西。所有渲染都由前端 Vuejs 代码处理。我唯一的观点是你需要质疑使用 Django 模板的决定。 如何链接到图片等静态资产?用户上传的文件? 我不处理用户上传的文件/媒体,但任何其他图像都在src\images 中,并且会被 webpack 拾取。你看过关于后端集成的 Vue 文档吗? vuejs-templates.github.io/webpack/backend.html 您是否使用 collectstatic 命令实现了该功能?否则在heroku上运行有点困难,例如。

以上是关于获取 Django 的静态文件包括在 Vue.js .vue 模板中工作的主要内容,如果未能解决你的问题,请参考以下文章

Django在开发中直接从静态文件夹加载静态(不是来自应用程序)

如何让 Django 看到 Vue.js 编译生成的 dist/static 下的文件?

在静态页面中使用 Vue.js

我如何使用 Django + Vue.js 快速构建项目

Vue.js webpack:如何获取目录中的文件列表?

道具被变异(在 django 模板和带有 CDN 的 Vue.js 中)