我很难解决如何在Django中以特权用户身份登录网站来编辑实时网站上的html和css(如果可以在Flask中使用,我可以使用它)。例如,修改页面上使用的背景图像。 ckeditor允许您对模型字段执行此操作:
class Post(models.Model):
content = RichTextField()
但不适用于静态html或css。人们通常如何做到这一点 - 在测试机器上进行所有更改,将.html和css推送到实际网站?理想情况下,我希望设计人员能够使用wysiwyg工具登录和修改网站,而无需开发人员。
答案 0 :(得分:1)
如果你想实现网站的布局文件的编辑,就像Wordpress为主题做的那样,你将需要实现一个应用程序来自己做,我不知道任何现有的项目,允许你在Django或Flask中这样做。
简而言之,您需要选择要公开的文件,并在视图中加载文本文件open(file)
,将其显示在textarea中的Django表单中,然后将其保存回来该文件再次。
如果您正在编辑css文件,则根据您的设置,您可能需要在表单保存上触发collectstatic
命令,以便文件转到需要的位置。
您还可以使用Ace Editor来简化代码编辑。
这是我在之前项目中用于实现此目的的一个精简示例:
class EditFileView(FormView):
template_name = "file_edit_form.html"
form_class = EditFileForm
ALLOWED_ROOTS = ["%s/" % DISPLAY_TEMPLATES_DIRECTORY, ]
def get_allowed_roots(self):
return self.ALLOWED_ROOTS
def dispatch(self, request, *args, **kwargs):
if "file_name" not in request.GET:
raise Http404
file_name = request.GET['file_name']
exists = False
for root in self.get_allowed_roots():
exists = os.path.exists(os.path.join(root, file_name))
if exists:
self.file_path = os.path.join(root, file_name)
self.file_name = file_name
self.root = root
break
if not exists:
logger.debug(u"EditFileView: Could not find file to edit - %s" % file_name)
raise Http404()
return super(EditFileView, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
try:
f = open(self.file_path, "wt")
f.write(form.cleaned_data['file_contents'])
f.close()
except Exception, e:
pass
return HttpResponseRedirect(self.get_success_url())
def get_initial(self):
initial = super(EditFileView, self).get_initial()
with open("%s" % self.file_path, "r") as f:
initial['file_contents'] = f.read()
initial["file_path"] = self.file_path
return initial
def get_success_url(self):
return reverse("edit_file") + "?file_name=%s" % self.file_name
def get_context_data(self, **kwargs):
current = super(EditFileView, self).get_context_data(**kwargs)
current.update({"file_name": self.file_path[len(self.root):].replace("//", "/")})
return current