Djam Documentation. Release Participatory Culture Foundation

Similar documents
Django Phantom Theme Documentation

django-dajaxice Documentation

MapEntity Documentation

django-templation Documentation

django-allauth-2fa Documentation

django-scaffold Documentation

alphafilter Documentation

Framework approach to building content management systems. Wednesday, February 20, 13

DJOAuth2 Documentation

django-mongonaut Documentation

django-messages Documentation

django-facetools Documentation

django-contact-form Documentation

MIT AITI Python Software Development Lab DJ1:

django-password-reset Documentation

Django Extra Views Documentation

django-baton Documentation

django simple pagination Documentation

Gargoyle Documentation

django-baton Documentation

CID Documentation. Release Francis Reyes

open-helpdesk Documentation

Django File Picker Documentation

django-oscar-paypal Documentation

Django File Picker Documentation

django-session-security Documentation

django-sticky-uploads Documentation

Bambu API Documentation

django-ratelimit-backend Documentation

Django starting guide

django-embed-video Documentation

django-embed-video Documentation

Django-frontend-notification Documentation

Building a Django Twilio Programmable Chat Application

django-cas Documentation

SagePay payment gateway package for django-oscar Documentation

django-intranet Documentation

Django MFA Documentation

Django by errors. Release 0.2. Sigurd Gartmann

django SHOP Release dev0

django-embed-video Documentation

django-reinhardt Documentation

django-users2 Documentation

Django IPRestrict Documentation

django-dajax Documentation

Graphene Documentation

neo4django Documentation

Accelerating Information Technology Innovation

django-inplaceedit Documentation

Statirator Documentation

djangotribune Documentation

Pluggable Patterns. For Reusable Django Applications

django-oscar Documentation

django-fobi Documentation

The Django Web Framework Part II. Hamid Zarrabi-Zadeh Web Programming Fall 2013

Linguistic Architecture

wagtail-robots Documentation

Django PAM Documentation

django-intercom Documentation

django-private-chat Documentation

django-revproxy Documentation

Django Admin Sortable Documentation

django-registration-redux Documentation

django-slim Documentation

django-dynamic-db-router Documentation

django-responsive2 Documentation

Django AdminLTE 2 Documentation

Python-Django-DevOps Documentation

Django urls Django Girls Tutorial

django-photologue Documentation

django-stored-messages Documentation

django-conduit Documentation

TailorDev Contact Documentation

staff Documentation Release 1.2

Django-CSP Documentation

django-avatar Documentation

django-autocomplete-light Documentation

Django Map Widgets Documentation

Django Image Tools Documentation

django-auditlog Documentation

django-selenium Documentation

nacelle Documentation

django-telegram-bot Documentation

Django Standalone Apps

Django Part II SPARCS 11 undead. Greatly Inspired by SPARCS 10 hodduc

django-kaio Documentation

cmsplugin-blog Release post 0 Øyvind Saltvik

wagtailmenus Documentation

Django: Views, Templates, and Sessions

Tailor Documentation. Release 0.1. Derek Stegelman, Garrett Pennington, and Jon Faustman

Awl Documentation. Release Christopher Trudeau

django-konfera Documentation

django-ad-code Documentation

django-openid Documentation

Nuit Documentation. Release Ben Cardy

fragapy Documentation

django-model-report Documentation

django-fluent-dashboard Documentation

django-avatar Documentation

django-simple-sms Documentation

Transcription:

Djam Documentation Release 0.1.0 Participatory Culture Foundation December 24, 2013

Contents 1 Links 3 2 Getting Started 5 2.1 Quick Start................................................ 5 2.2 Extending the Admin........................................... 6 2.3 Beyond django.contrib.admin.................................. 7 3 Contributing 11 3.1 Contributing to Djam........................................... 11 4 Indices and tables 13 i

ii

Djam is a third-party admin with the following goals: Provide basic CRUD functionality similar to the current admin. Ease the transition by supporting auto-generation of an admin based on installed ModelAdmins. Support most of the basic ModelAdmin options out-of-the-box. Make it easy to add new custom areas to the admin that don t fit into the traditional CRUD model. Use the latest front-end tools and design patterns. The name is alliterative; the beginning of Djam is pronounced the same as the beginning of Django. Contents 1

2 Contents

CHAPTER 1 Links docs http://django-djam.readthedocs.org/ code https://github.com/django-djam/django-djam/ irc #django-djam on irc.freenode.net build status 3

4 Chapter 1. Links

CHAPTER 2 Getting Started 2.1 Quick Start Trying out djam is easy, especially if you re already using django.contrib.admin. First, just install it. $ pip install django-djam==0.1.0 Djam requires Django 1.5+ and Django-Floppyforms 1.1+. 2.1.1 urls.py Next, go into the urls.py file for your project. There is probably something there along these lines: from django.contrib import admin admin.autodiscover() urlpatterns = patterns(, url(r ^admin/, include(admin.site.urls)), ) All you need to do here is change it to look more like the following: import djam djam.autodiscover() urlpatterns = patterns(, url(r ^admin/, include(djam.admin.urls)), ) Note: It s also entirely possible to run djam and django.contrib.admin side-by-side, if you want to compare the two. The test project does it! 2.1.2 settings.py Now go into your settings file. 5

First, make sure that djam and floppyforms are somewhere in your INSTALLED_APPS. For example: INSTALLED_APPS = ( django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.sites, django.contrib.messages, django.contrib.staticfiles, ) # Other apps... djam, floppyforms, Now make sure that django.core.context_proocessors.request is in your TEMPLATE_CONTEXT_PROCESSORS. If you just add it to Django s defaults, you ll get: TEMPLATE_CONTEXT_PROCESSORS = ( "django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.core.context_processors.static", "django.core.context_processors.tz", "django.contrib.messages.context_processors.messages", "django.core.context_processors.request", ) 2.1.3 Congratulations! You re now using djam. Go ahead and log in; have a look around. All of the ModelAdmins you registered with django.contrib.admin should already be showing up on the dashboard. Whenever you feel ready, you can move on to Extending the Admin and find out why that is. 2.2 Extending the Admin Riff n. (in popular music and jazz) A short repeated phrase, frequently played over changing chords or used as a background to a solo improvisation. Like a riff is a building block of jazz music, a Riff is the building block of the Djam admin. Riffs are essentially modular, decoupled chunks of namespaced functionality which can be attached to the main admin site. ModelAdmins (and the Django admin site) work on the same principle. The main difference in djam is that riffs don t necessarily map one-to-one to models. There can be multiple registered riffs related to the same model, and there can be riffs registered which don t relate to any model at all. 2.2.1 ModelRiffs We ll start out with ModelRiffs, which are essentially analogous to ModelAdmins. Here is how you could set up some basic ModelRiffs: # myapp/riffs.py from djam.riffs.models import ModelRiff 6 Chapter 2. Getting Started

from myapp.models import MyModel, MyOtherModel class MyModelRiff(ModelRiff): model = MyModel class MyModelRiff2(ModelRiff): model = MyModel namespace = myapp_mymodel2 display_name = MyModel 2 slug = mymodel-2 class MyOtherModelRiff(ModelRiff): model = MyOtherModel use_modeladmin = False # Djam looks for this variable during :func:.autodiscovery <autodiscover>. riffs = [MyModelRiff, MyOtherModelRiff] Each ModelRiff class has an associated model. If a ModelAdmin has been registered for that model, the riff will by default inherit a number of options from that ModelAdmin, unless use_modeladmin is False. 2.2.2 Autodiscovery djam.autodiscover(self, with_batteries=true, with_modeladmins=true) djam.autodiscover() loops through INSTALLED_APPS and loads any riffs.py modules in those apps - similar to the django admin s autodiscovery. On top of that, djam will by default include ModelRiffs which have been auto-generated from registered ModelAdmins. This can be turned of by passing in with_modeladmins=false. For some commonly-used models (such as django.contrib.auth.user) djam provides a Riff which handles some functionality that would otherwise be lost during the conversion from ModelAdmin to ModelRiff. This can be disabled by passing in with_batteries=false. The order that these are loaded is: app riff modules, batteries, and ModelAdmins. If two riffs are registered using the same namespace, the first one registered will take precedence; any others will be ignored. 2.2.3 Great, so it can replace the admin. Why yes, it can. But there s also a lot you can do that goes beyond the capabilities of Django s admin. 2.3 Beyond django.contrib.admin 2.3.1 A Model-less Riff Here s an example of a riff which is simple to implement in Djam, but which in Django s admin would require (at the very least) overriding several base templates and using a custom AdminSite subclass. This code is taken directly from the test project s example app. 2.3. Beyond django.contrib.admin 7

# example_app/riffs.py from django.conf.urls import patterns, url from djam.riffs.base import Riff from test_project.example_app.views import HelloView, HelloFinishedView class HelloRiff(Riff): display_name = "Hello" def get_extra_urls(self): return patterns(, url(r ^$, HelloView.as_view(**self.get_view_kwargs()), name= hello ), url(r ^(?P<slug>[\w-]+)/$, HelloFinishedView.as_view(**self.get_view_kwargs()), name= hello_finished ), ) def get_default_url(self): return self.reverse( hello ) riffs = [HelloRiff] Essentially, this riff has one view which asks a user for their name (a slug) and another view which says Hello <name>. It doesn t use any models. Or more to the point, it doesn t provide a CRUD interface for interacting with a particular model. # example_app/forms.py from django import forms class HelloWorldForm(forms.Form): name = forms.slugfield() # example_app/views.py from django.http import HttpResponseRedirect from djam.views.generic import FormView, TemplateView from test_project.example_app.forms import HelloWorldForm class HelloView(FormView): form_class = HelloWorldForm template_name = djam/form.html def form_valid(self, form): url = self.riff.reverse( hello_finished, slug=form.cleaned_data[ name ]) return HttpResponseRedirect(url) class HelloFinishedView(TemplateView): template_name = example_app/hello.html def get_crumbs(self): 8 Chapter 2. Getting Started

crumbs = super(hellofinishedview, self).get_crumbs() return crumbs + [(None, self.kwargs[ slug ])] The notable difference here is that we re importing our generic views from djam.views.generic rather than django.views.generic. These views have some riff-specific functionality, including providing the riff itself and breadcrumbs for navigation to the template context. {# example_app/templates/example_app/hello.html #} {% extends djam/ base.html %} {% load webdesign djam %} {% block main %} <h1>hello, {{ slug }}!</h1> {% lorem 3 p random %} <a href="{% riff_url riff hello %}" class= btn btn-success btn-large >Once more!</a> {% endblock %} In this template, you can see the {% riff_url %} template tag being used. It reverses the given view name ( hello ) within the namespace of the given riff (in this case the current riff). And that s it! 2.3. Beyond django.contrib.admin 9

10 Chapter 2. Getting Started

CHAPTER 3 Contributing 3.1 Contributing to Djam 3.1.1 Coding style Unless otherwise specified, follow PEP 8. Since we re a new project, there shouldn t be any cases (apart from those outlined here) where you need to instead conform to surrounding code. Use four spaces for indentation. In docstrings, use action words. For example, Calculates the number of apples rather than Calculate the number of apples. Empty lines should not contain indentation. Always use absolute imports. They re easier to debug and are 3.0 forwards-compatible. Be sure to include from future import unicode_literals at the top of any file that uses strings. 3.1.2 Git practices We follow the same guidelines for using git (and github) as Django, with one exception: we prefer ticket branches be named ticket/xxxx. 11

12 Chapter 3. Contributing

CHAPTER 4 Indices and tables genindex modindex search 13