将 ace.js 编辑器的内容写入 Django 文件
Write contents of ace.js editor to file in Django
我正在尝试从服务器编辑我的 Django 模板。我知道这远非如此,但我写了这段代码:
def editor(request):
handle=open(os.path.join(settings.BASE_DIR, 'app/code/test.html'), 'r+')
var=handle.read()
context = {
"message": "editor",
"code": var
}
return render(request, 'app/editor.html', context)
读取文件并将其内容传递给模板,ace.js 在编辑器中显示它。
<div id="editor-container">
<div id="editor">{{code}}</div>
</div>
它显示得很好,我可以编辑文本,但是如果我想保存我的编辑,将它们写入文件,按钮需要转到保存路径,因为我没有使用 ajax, 但我如何将新版本的文档传递给要写入文件的视图?
要完成这项工作,您需要隐藏输入。每当编辑器的内容更新时,输入也会更新。保存内容只是提交表单的事情。这是我想出的。
首先是 html 编辑器所在的模板。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ace editing</title>
<style type="text/css" media="screen">
#editor {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.editor-container {
position: relative;
height: 300px;
width: 100%;
}
</style>
</head>
<body>
<div class="editor-container">
<div id="editor">
{{code}}
</div>
</div>
<form method="POST">
{% csrf_token %} {{form.as_p}}
<button type="submit">Save</button>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.js"></script>
<script>
var editor = ace.edit('editor');
editor.setTheme("ace/theme/monokai");
editor.session.setMode("ace/mode/html");
editor.on('change', function() {
code_hidden_input = document.querySelector('#id_code');
code_hidden_input.value = editor.getValue();
console.log(editor.getValue())
})
</script>
</body>
</html>
现在在您的 views.py 中,代码将如下所示。
from django.shortcuts import render
from .forms import MyForm
import os
from django.conf import settings
# Create your views here.
def index(request):
form = MyForm()
handle = open(os.path.join(settings.BASE_DIR, 'core/templates/core/test.html'))
code = handle.read()
if request.method == "POST":
form = MyForm(request.POST)
if form.is_valid():
print(form.cleaned_data['code'])
# This is the part where you save the code you have
# edited to some file
context = {
'form': MyForm(),
'code': code
}
return render(request, "core/index.html", context)
在您的 forms.py 文件中创建一个名为 My Form
的 class,如下所示
from django import forms
class MyForm(forms.Form):
code = forms.CharField(max_length=10000, widget=forms.HiddenInput())
就是这样,请注意,在使用表单提交 html 时,您需要清理输入内容。
我正在尝试从服务器编辑我的 Django 模板。我知道这远非如此,但我写了这段代码:
def editor(request):
handle=open(os.path.join(settings.BASE_DIR, 'app/code/test.html'), 'r+')
var=handle.read()
context = {
"message": "editor",
"code": var
}
return render(request, 'app/editor.html', context)
读取文件并将其内容传递给模板,ace.js 在编辑器中显示它。
<div id="editor-container">
<div id="editor">{{code}}</div>
</div>
它显示得很好,我可以编辑文本,但是如果我想保存我的编辑,将它们写入文件,按钮需要转到保存路径,因为我没有使用 ajax, 但我如何将新版本的文档传递给要写入文件的视图?
要完成这项工作,您需要隐藏输入。每当编辑器的内容更新时,输入也会更新。保存内容只是提交表单的事情。这是我想出的。
首先是 html 编辑器所在的模板。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ace editing</title>
<style type="text/css" media="screen">
#editor {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.editor-container {
position: relative;
height: 300px;
width: 100%;
}
</style>
</head>
<body>
<div class="editor-container">
<div id="editor">
{{code}}
</div>
</div>
<form method="POST">
{% csrf_token %} {{form.as_p}}
<button type="submit">Save</button>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.js"></script>
<script>
var editor = ace.edit('editor');
editor.setTheme("ace/theme/monokai");
editor.session.setMode("ace/mode/html");
editor.on('change', function() {
code_hidden_input = document.querySelector('#id_code');
code_hidden_input.value = editor.getValue();
console.log(editor.getValue())
})
</script>
</body>
</html>
现在在您的 views.py 中,代码将如下所示。
from django.shortcuts import render
from .forms import MyForm
import os
from django.conf import settings
# Create your views here.
def index(request):
form = MyForm()
handle = open(os.path.join(settings.BASE_DIR, 'core/templates/core/test.html'))
code = handle.read()
if request.method == "POST":
form = MyForm(request.POST)
if form.is_valid():
print(form.cleaned_data['code'])
# This is the part where you save the code you have
# edited to some file
context = {
'form': MyForm(),
'code': code
}
return render(request, "core/index.html", context)
在您的 forms.py 文件中创建一个名为 My Form
的 class,如下所示
from django import forms
class MyForm(forms.Form):
code = forms.CharField(max_length=10000, widget=forms.HiddenInput())
就是这样,请注意,在使用表单提交 html 时,您需要清理输入内容。