diff options
Diffstat (limited to 'sublab_project/preview_admin/admin.py')
-rw-r--r-- | sublab_project/preview_admin/admin.py | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/sublab_project/preview_admin/admin.py b/sublab_project/preview_admin/admin.py index 6f6f0e2..d7afd99 100644 --- a/sublab_project/preview_admin/admin.py +++ b/sublab_project/preview_admin/admin.py @@ -3,6 +3,8 @@ from django.conf.urls.defaults import patterns, url from django.core.urlresolvers import reverse, NoReverseMatch from django.shortcuts import render_to_response from django.utils.safestring import mark_safe +from django.conf import settings +from django.http import Http404 import logging logger = logging.getLogger('preview_admin') @@ -19,7 +21,7 @@ class PreviewAdmin(ModelAdmin): ) return myurls + urls - def add_preview(self, formfield): + def add_preview(self, fieldname, formfield): render = formfield.widget.render def preview_render(name, *args, **kwargs): @@ -29,7 +31,9 @@ class PreviewAdmin(ModelAdmin): preview_url = reverse('admin:%s_%s_preview' % info, args=[name], current_app=self.admin_site.name) - rendered += '<p><a href="%s">Preview</a></p>' % preview_url + rendered += '<div id="preview-%s" class="preview-box"></div>' % fieldname + rendered += '<p><a onclick="preview_admin(\'%s\',\'%s\')">Preview</a></p>' % ( + fieldname, preview_url) return mark_safe(rendered) formfield.widget.render = preview_render @@ -38,10 +42,26 @@ class PreviewAdmin(ModelAdmin): formfield = super(PreviewAdmin, self).formfield_for_dbfield(db_field, **kwargs) if db_field.name in self.preview_fields: - self.add_preview(formfield) + self.add_preview(db_field.name, formfield) return formfield def preview(self, request, field): - return render_to_response('404.html') + if (field not in self.preview_fields + or 'data' not in request.GET): + raise Http404 + context = { + 'preview' : mark_safe(self.preview_fields[field](request.GET['data'])) + } + return render_to_response('admin/preview.html', context) + + def _media(self): + media = super(PreviewAdmin, self)._media() + media.add_js(['%sjs/jquery.js' % settings.ADMIN_MEDIA_PREFIX ]) + media.add_js(['%sjs/preview.js' % settings.ADMIN_MEDIA_PREFIX ]) + media.add_css({ + 'all' : ['%scss/preview.css' % settings.ADMIN_MEDIA_PREFIX ]}) + + return media + media = property(_media) |