Skip to content

Instantly share code, notes, and snippets.

@cansadadeserfeliz
Last active August 29, 2015 14:11
Show Gist options
  • Save cansadadeserfeliz/c1d09bde458bd08c6346 to your computer and use it in GitHub Desktop.
Save cansadadeserfeliz/c1d09bde458bd08c6346 to your computer and use it in GitHub Desktop.
Upload files with Redactor Text Editor & Django
from django import forms
class ImageForm(forms.Form):
file = forms.ImageField()
class FileForm(forms.Form):
file = forms.FileField()
/*jshint strict:true, browser:true, jquery:true */
$(function () {
'use strict';
$.Redactor.opts.langs.es = {
html: 'HTML',
image: 'Imagen',
link: 'Enlace',
// ....
};
// Enable redactor
$('textarea').redactor({
minHeight: 300,
toolbarFixedTopOffset: 63,
lang: 'es',
imageUpload: '/redactor/upload/image/',
fileUpload: '/redactor/upload/file/',
fileUploadErrorCallback: function(json) {
alert(json.error);
}
});
});
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.conf import settings
from app.views import RedactorUploadView
from app.forms import FileForm, ImageForm
urlpatterns = patterns(
'',
url('^redactor/upload/image/(?P<upload_to>.*)',
RedactorUploadView.as_view(form_class=ImageForm),
name='redactor_upload_image'),
url('^redactor/upload/file/(?P<upload_to>.*)',
RedactorUploadView.as_view(form_class=FileForm),
name='redactor_upload_file'),
)
urlpatterns += static(
settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT,
)
import os
from django.views.generic import FormView
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from django.core.files.storage import FileSystemStorage
from django.utils.encoding import force_str
from app.forms import ImageForm
class RedactorUploadView(FormView):
form_class = ImageForm
http_method_names = ('post',)
upload_to = 'redactor/'
@method_decorator(csrf_exempt)
@method_decorator(staff_member_required)
def dispatch(self, request, *args, **kwargs):
return super(RedactorUploadView, self).dispatch(request, *args,
**kwargs)
def form_invalid(self, form):
try:
error = form.errors.values()[-1][-1]
except:
error = 'Invalid file.'
data = {
'error': error,
}
return HttpResponse(json.dumps(data), content_type='application/json')
def form_valid(self, form):
upload_file = form.cleaned_data['file']
full_path = os.path.join(self.upload_to, upload_file.name)
storage = FileSystemStorage()
real_path = storage.save(full_path, upload_file)
file_name = force_str(upload_file.name)
# get url for file if he saved else None
file_url = storage.url(real_path)
data = {
'filelink': file_url,
'filename': file_name,
}
return HttpResponse(json.dumps(data), content_type='application/json')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment