Transcript

PYCON UK 2014

FIRST STEPSWITH DJANGO CMS

by

Iacopo Spalletti

@yakkys

WHO AM I?Founder and Lead developer @NephilaIt

django CMS core developer 

django CMS installer author

DJANGO CMS

FIRST LOOKBRIEF OVERVIEW OF DJANGO CMS

FEATURESFEEL FREE TO COME TO THE BOOTH OR

AT THE SPRINTS FOR MORE

WHAT'S DJANGO CMS?'JUST' A CMS FOR DJANGO (APPARENTLY)

With a twist!

DJANGO CMS

HOW IS DIFFERENT?IT'S LIMITED (BY DESIGN)

YOU CANNOT "EXTEND" A PAGE

DJANGO CMS

WHY IS THAT?WHY NOT?

WE HAVE DJANGO MODELS!

GOOD DJANGO CITIZEN

 

DJANGO CMS

CONTRIBUTING FEATURESdjango CMS provides features that your applications

can use

BASIC CONCEPTSPAGE

PLACEHOLDER

PLUGIN

APPHOOK

FRONTEND EDITOR

LIVES IN A LIVE AND DRAFT VERSION

DEFINED BY THE TEMPLATE APPLIED TO IT

PAGETHE BUILDING BLOCK OF THE CMS

PLACEHOLDERACTIVE AREAS WITHIN YOUR PAGES

PLUGIN CONTAINERS

DEFINED IN THE TEMPLATES

JUST A TEMPLATETAG

PLACEHOLDER

HOW TO DEFINE APLACEHOLDER?

{% placeholder "first_placeholder" %}

PLACEHOLDER

THERE IS MOREclass MyModel(models.Model):    name = models.CharField(max_length=200)    abstract = models.TextField()    content = PlaceholderField()

Composition, not inheritance

PLUGINPlaceholder = Container

Plugin = Content

PLUGIN

WHAT'S A PLUGIN?A content

A bridge towards other Django applications

PLUGIN

WRITING PLUGIN IS EASYclass MyPlugin(CMSPluginBase):    name = _('My plugin')    render_template = 'myapp/myplugin.html'

PLUGIN

1. PLUGIN CLASSclass MyPlugin(CMSPluginBase):    name = _('My plugin')    model = MyPluginModel    render_template = 'myapp/myplugin.html'        def render(self, context, instance, placeholder):         newslist = News.objects.all().order_by('­date')         context.update({              'instance': instance,              'news_list': newslist[:instance.posts]         })         return context

Plugin = ModelAdmin + template + get_context_data

PLUGIN

2. THE PLUGIN MODELIt's the plugin configuration

class MyPluginModel(CMSPlugin):     title = models.CharField(max_length=200)     posts = models.PositiveIntegerField()

PLUGIN

3. THE TEMPLATETemplate is a standard Django template fragment to

which the plugin generated context is provided

<div class="news_list"><h2>{{ instance.title }}</h2>    {% for news in news_list %}        <a href="{{ news.get_absolute_url }}">             {{ news.title }}</a><br>    {% endfor %}</div>

APPHOOKIs a bridge between the CMS and other Django

applications

In rough terms, it appends the application URLConf to

the page tree

It wraps the URLCon in a class

APPHOOK

SOME CODEclass MyApp(CMSApp):    name = _("My App")    urls = ["apps.my_app.urls"]    menus = [MyMenu]

apphook_pool.register(MyApp)

APPHOOK

THAT'S ALL :)

FRONTEND EDITORWARNING!

IT'S ADDICTIVE!

FRONTEND EDITOR

WHAT'S IT?NEW IN DJANGO CMS 3

ADMIN OUTSIDE THE ADMIN

FRONTEND EDITOR

FOLLOW THE WHITE PONY

FRONTEND EDITOR

TOOLBARCOMPLETE

SIMPLE

DYNAMIC

CUSTOMIZABLE

FRONTEND EDITOR

ANCHE NEI VOSTRI MODELEVERY MODEL CAN BE FRONTEND-ENABLED

{% render_model instance "abstract" %}

{% render_model_block instance %}<h3>{{ instance.title }}</h3><div class="date">{{ instance.date }}</{% endrender_model_block %}

SHAMELESS PLUG!

GRAZIE!SEE YOU TOMORROW!

DJANGO CMS SPRINT

And tips and support to use django CMS

Iacopo Spalletti

i.spalletti@nephila.co.uk

@yakkys

top related