Source code for embed_video.admin

from django import forms
from django.utils.safestring import mark_safe

from .backends import detect_backend, UnknownBackendException, \
    VideoDoesntExistException
from .fields import EmbedVideoField


[docs]class AdminVideoWidget(forms.TextInput): """ Widget for video input in administration. If empty it works just like :py:class:`django.forms.TextInput`. Otherwise it renders embedded video together with input field. .. todo:: Django 1.6 provides better parent for this widget - :py:class:`django.forms.URLInput`. """ output_format = u'<div style="float:left" class="video">' \ u'{video}<br />{input}</div>' \ u'<hr style="visibility: hidden; clear:both">' def __init__(self, attrs=None): default_attrs = {'size': '40'} if attrs: default_attrs.update(attrs) super(AdminVideoWidget, self).__init__(default_attrs) def render(self, name, value='', attrs=None, size=(420, 315)): output = super(AdminVideoWidget, self).render(name, value, attrs) if not value: return output try: backend = detect_backend(value) return mark_safe(self.output_format.format( video=backend.get_embed_code(*size), input=output, )) except (UnknownBackendException, VideoDoesntExistException): return output
[docs]class AdminVideoMixin(object): """ Mixin using :py:class:`AdminVideoWidget` for fields with :py:class:`~embed_video.fields.EmbedVideoField`. Usage:: from django.contrib import admin from embed_video.admin import AdminVideoMixin from .models import MyModel class MyModelAdmin(AdminVideoMixin, admin.ModelAdmin): pass admin.site.register(MyModel, MyModelAdmin) """ def formfield_for_dbfield(self, db_field, **kwargs): if isinstance(db_field, EmbedVideoField): return db_field.formfield(widget=AdminVideoWidget) return super(AdminVideoMixin, self) \ .formfield_for_dbfield(db_field, **kwargs)