(Django)拆分前端和后端

时间:2016-03-25 20:43:11

标签: django brunch

我想拆分前(Brunch)和后(Django)。我有这个文件夹结构:

backend
  mydjangoapp
  static
    mydjangoapp
      image
      javascripts
      stylesheets
      index.html

frontend
  app
  public
    image
    javascripts
    stylesheets
    index.html

例如, index.html 中的样式表路径为:

  • [后端] static/mydjangoapp/stylesheets/app.css
  • [前端] /stylesheets/app.css

我使用前端路径在本地使用早午餐服务器和后端路径在部署时使用django app测试前端。目前部署过程如下所示:

  1. brunch build
  2. 公开文件夹的内容移至backend/static/mydjangoapp
  3. 更改 index.html app.js 等内的所有路径以匹配后端 静态路径。
  4. 不太方便。有没有办法自动完成?我想我可以在后端更改静态路径以匹配前端或编写脚本来执行此操作。但它不是一个真正合适的解决方案,是吗?必须有一种方法可以直接从前端文件夹呈现 index.html ,并在不更改路径的情况下加载静态文件。试图谷歌,但没有运气。

2 个答案:

答案 0 :(得分:0)

因此。我做了一些研究并找到了解决方案:

1)我在我的django应用程序前面使用了nginx服务器并将其配置为解析静态文件(nginx配置文件,http部分):

server {
    listen <%= ENV["PORT"] %>;
    server_name _;
    keepalive_timeout 5;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app_server;
    }

    location ~* .*\/.+\..+$ {
        root path/to/my/static/files;
    }
}

因此,静态路径与前端中的相同。无需改变那些。 Django应用程序根本不解析静态文件。它只是加载一个模板。

2)我写了一个python脚本来编译和复制所需的文件到后端(它位于前端根目录):

#!/usr/bin/env python

from subprocess import call
import shutil
import os

BACKEND_FOLDER = "../backend/ui/public"

call(["brunch", "build", "-p"])
shutil.rmtree(BACKEND_FOLDER)
shutil.copytree("public", BACKEND_FOLDER)

print ("Deployed to: " + BACKEND_FOLDER)

现在我需要做的就是运行该脚本。

答案 1 :(得分:0)

您可以使用post-brunchafter-brunch插件将文件从frontend/public复制到您选择的django静态目录。

after-brunch的示例 exports.config = { plugins: { afterBrunch: [ 'cp -r public ../backend/static' // cp -r /from/frontend/path /to/backend/path ] } }

post-brunch的示例 exports.config = { plugins: { postBrunch: function(files) { console.log("Run custom javascript code to copy files.") } } }