How to write a plugin¶
Plugins will be phased out in 2.1.0 when we update to Django 1.7.
A plugin is basically just a normal Django application. The only thing making it a pugin is that it integrates itself into the Devilry system in some way.
Setting up your testsite¶
In this howto we assume you have created a django site,
and that your plugin is a application in this site called
myplugin. It should
look something like this:
mysite/ settings.py manage.py urls.py myplugin/ models.py urls.py
There are several ways a plugin can integrate itself, but they all need some
place to do the integration. Just like
admin.py can be used to integrate
your application with the Django admin interface, devilry provides a place
where you can put code that you want to autoload.
First initialize the plugin system by adding:
from devilry.apps.core import pluginloader pluginloader.autodiscover()
mysite/urls.py, making it look something like this:
from django.conf.urls import * # Uncomment the next two lines to enable the admin: #from django.contrib import admin #admin.autodiscover() from devilry.apps.core import pluginloader pluginloader.autodiscover() urlpatterns = patterns('', # Example: # (r'^mysite/', include('mysite.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # (r'^admin/', include(admin.site.urls)), )
pluginloader.autodiscover() will autoload any module named
devilry_plugin in any application in
Your first plugin¶
Create a file named
mysite/myplugin/devilry_plugin.py, and put the
following code into the file:
print print "Hello plugin world!" print
Start the development server with
python manage.py runserver, go to
http://localhost:8000/ and you should see the message you printed in the
terminal/shell running the server.
pluginloader.autodiscover() will fail if you have any errors in your
devilry_plugin-module. It will not auto-reload failed modules before you
restart the server.