配置¶
v2版对配置进行了升级,新增了handler代替原来的expression,并使用 json-editor 使配置可视化。
deeru默认提供了4个配置,”博客配置”,”顶部图标栏配置”,”顶部导航栏配置”,”通用配置”。最后一个 通用配置
是key-value的配置,
用于给不想写复杂配置的开发者提供一个简单的进行配置的地方。
如何添加新的可视化配置¶
配置的model¶
首先你需要了解下配置的model,其代码在 app.app_models.config_model
下,有下面几个字段:
编写可视化配置的schema¶
目前所使用的json-editor是v2.0.0版本,默认使用spectre主题,fontawesome5图标库,swig模板引擎, 虽然你可以自由替换json-editor所使用的主题,图标库,模板引擎,但并不建议你更换。
你可以查看json-editor的文档,学习如何编写配置。自带的4个配置的schema在 app.consts.V2_Config_Schema
下,你可以参考他们编写。
下面是一个schema的样例:
{
"theme": "spectre",
"iconlib": "fontawesome5",
"template": "swig",
"schema": {
"type": "object",
"title": "博客配置",
"properties": {
"host": {
"type": "string",
"title": "博客域名或ip",
"format": "url"
}
}
}
}
注解
需要注意的是,内部的schema并不是Config model中的v2_schema,v2_schema是这个结构整体。
另外,你自定义的配置中不要使用 _
开头的key,如示例中的 “host”,不要用 “_host”。
如果你想快速实验你编写的schema效果,可以使用下面代码,把 o
替换为你的代码。
点击输出结果后会显示保存到 v2_config
的数据,以及格式化后的schema;建议直接复制这个格式化好的schema到Config model中。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Basic JSON Editor Example</title>
<link rel='stylesheet' href='https://cdn.staticfile.org/spectre.css/0.5.8/spectre.min.css'>
<link rel='stylesheet' href='http://cdn.staticfile.org/font-awesome/5.11.2/css/all.min.css'>
<script src="https://cdn.jsdelivr.net/npm/@json-editor/json-editor@v2.0.0/dist/jsoneditor.min.js"></script>
<script src="https://cdn.staticfile.org/swig/1.4.2/swig.min.js"></script>
</head>
<body>
<h1>Basic JSON Editor Example</h1>
<div id='editor_holder'></div>
<hr>
<div style="margin-left: 20px;margin-top: 20px">
<button class="btn " id='submit'>输出结果</button>
<div style="margin-top: 20px">
<textarea id="json" style="padding: 5px" cols="50" rows="40"></textarea>
<textarea id="options" style="padding: 5px;margin-left: 20px" cols="50" rows="40"></textarea>
</div>
</div>
<script>
// 把 o 替换为你的代码
var o = {
theme: 'spectre',
iconlib: 'fontawesome5',
template: 'swig',
schema: {
type: "object",
properties: {
title:{
type:'string'
}
},
}
};
var oS = JSON.stringify(o);
var editor = new JSONEditor(document.getElementById('editor_holder'), o);
document.getElementById('submit').addEventListener('click', function () {
document.getElementById('json').innerText = JSON.stringify(editor.getValue(), null, 3);
document.getElementById('options').innerText = oS;
});
</script>
</body>
</html>
编写v2_script¶
v2_script是一段js代码,会添加到创建json-editor之后,用于自定义修改json-editor的展示效果。
如果你需要用python代码向model中插入v2_script,建议用 r
前缀的字符串,否则需要处理转义字符。如:
js = r'console.log(11)'
在html中使用配置¶
如果你新建了一个新的配置,并希望在前端代码中读取它,那你需要两步操作:
(示例是直接修改app中的代码,实际操作时建议新建一个django的app,然后在新的app中操作)
在apps.py中修改/添加
deeru_config_context
的值,如app/apps.py文件:
class MAppConfig(AppConfig):
deeru_config_context = 'app.consts.app_config_context'
编辑
deeru_config_context
指向的对象(app/consts.py中的app_config_context)
app_config_context = {
'top_ico': '顶部图标栏',
'top_menu': '顶部导航栏',
}
它是一个字典,key为在前端代码中使用的名字,value为数据库中的名字。
在前端代码中这样使用它:
{{ config.top_ico.xxx }}