-
Notifications
You must be signed in to change notification settings - Fork 23
Widgets Specification
Peter Siemens edited this page Jun 9, 2017
·
9 revisions
Widgets are modular components that can be used throughout different parts of a Dispatch website.
A zone is a pre-defined portion of the website that can support one or more widget types. Zones allow us to configure the placement of widgets throughout the site. A widget can be compatible with one or more zones.
# your-theme/zones.py
from dispatch.theme import register
from dispatch.theme.widgets import Zone
@register.zone
class Zone1(Zone):
id = 'zone-1'
name = 'Zone 1'
@register.zone
class Zone2(Zone):
id = 'zone-2'
name = 'Zone 2'
A zone can be rendered in any template using the zone
template tag like so:
{% load widgets %}
...
<div>
{% zone 'zone-1' %}
</div>
Zones only have two methods: GET
and PUT
. Since zones and widgets are defined in the theme code, they do not support the standard CRUD operations. The zone PUT
route only allows the user to manipulate the dynamic data stored for that zone.
GET '/api/zones/'
# JSON
[
{
'id': 'zone-1',
'name': 'Zone 1',
'widget': {
'id': 'widget-1',
'data': {
'title': 'test title 1',
}
}
},
{
'id': 'zone-2',
'name': 'Zone 2',
'widget': {
'id': 'widget-2',
'data': {
'title': 'test title 2',
}
}
}
]
GET '/api/zones/{id}'
# JSON
{
'id': 'zone-2',
'name': 'Zone 2'
'widget': {
'id': 'widget-2',
'data': {
'title': 'test title 2',
}
}
}
PATCH '/api/zones/{id}'
# JSON
{
'widget': {
'id': 'widget-1',
'data': {
'title': 'test title 1',
}
}
}
# your-theme/widgets.py
from dispatch.theme import register
from dispatch.theme.widgets import Widget,CharField
from dispatch.theme.fields import CharField
@register.widget
class CustomWidget(Widget):
id = 'custom-widget'
name = 'Custom Widget'
template = 'widgets/custom-widget.html'
zones = (Zone1,)
# Define fields
title = CharField()
GET '/api/widgets/'
# JSON
[
{
'id': 'widget-1',
'name': 'Widget 1',
'fields': [
{
'type': 'text'
},
{
'type': 'image',
'many': True
}
}]
}
]