将JSON传递给Django模板和Grunt

时间:2014-07-19 07:16:48

标签: json django gruntjs

我的设置包含我的base.html模板中使用的大量.js文件,并且在连接所有生产文件时,我的Gruntfile.js中重复了相同的列表。

如何将文件列表放在一个JSON(或其他任何格式)中,并且能够将它传递给Django和Grunt?

这是一个简化的例子:

base.html

<html lang="en">
<head>
    <title></title>
</head>
<body>


    <script src="static/some.js"></script>
    <!-- a lot more js files go here -->
</body>
</html>

Gruntfile.js

uglify: {
  options:{},
  build: {
    options:{
      report: 'min'
    },
    files: {
      'static/some.min.js': [
        'static/some.js',
        // lots of other js files go here
      ]
    }
}

我知道Grunt可以通过grunt.file.readJSON('files.json')require('files.json')加载JSON文件但是如何在Django模板中执行相同操作?

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣,这就是我的目的:

sample.json:

{
  "files": [
    "file1.js",
    "file2.js"
  ]
}

Grunt任务:

module.exports = function(grunt) {
  var generalJS = prepare(grunt.file.readJSON('sample.json'));

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
        options:{},
      build: {
        options:{},
        files: {
          'sample.min.js': generalJS.files
        }
      }
    }
  });

  grunt.registerTask('build', ['uglify']);
}

Django模板标签:

@register.simple_tag
def render_js_files(file_location):

    result = ""
    static_base_path = settings.STATIC_DIR
    json_js_files_path = os.path.join(static_base_path, file_location)
    json_data = open(json_js_files_path)
    data = json.load(json_data)
    files_dirs = data['files']
    json_data.close()
    src_template = "<script src='%s'></script>\n"
    for js_file_path in files_dirs:
        result += src_template % urljoin(PrefixNode.handle_simple("STATIC_URL"), js_file_path)
    return result

base.html中的用法:

{% render_js_files 'sample.json' %}