1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
from django.contrib.admin import ModelAdmin
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
import logging
logger = logging.getLogger('preview_admin')
class PreviewAdmin(ModelAdmin):
preview_fields = {}
def get_urls(self):
info = self.model._meta.app_label, self.model._meta.module_name
urls = super(PreviewAdmin, self).get_urls()
myurls = patterns('',
url(r'^preview/(.+)/$', self.admin_site.admin_view(self.preview),
name='%s_%s_preview' % info),
)
return myurls + urls
def add_preview(self, formfield):
render = formfield.widget.render
def preview_render(name, *args, **kwargs):
rendered = render(name, *args, **kwargs)
info = self.model._meta.app_label, self.model._meta.module_name
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
return mark_safe(rendered)
formfield.widget.render = preview_render
def formfield_for_dbfield(self, db_field, **kwargs):
formfield = super(PreviewAdmin, self).formfield_for_dbfield(db_field, **kwargs)
if db_field.name in self.preview_fields:
self.add_preview(formfield)
return formfield
def preview(self, request, field):
return render_to_response('404.html')
|