我的设置包含我的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模板中执行相同操作?
答案 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' %}