TP : Agenda - Templates¶
date: | 2012-05-01 22:52 |
---|---|
tags: | django, python |
category: | Django |
author: | Rémy Hubscher |
Énoncé¶
Nous souhaitons réaliser un agenda qui nous permettra :
- De gérer plusieurs agenda
- D’intégrer des événements dans l’agenda
- D’ajouter, modifier, supprimer, déplacer un événement
L’IHM¶
En fait vous allez voir que ce qu’il y a de plus dur dans un agenda web, c’est l’IHM.
Ce n’est pas le but de ce TP, mais à quoi bon avoir un code basé sur Django si au niveau du frontend, la qualité ne suit pas ?
Comme IHM, je vous propose d’utiliser FullCalendar.
Installation des static¶
On va extraire fullcalendar dans le répertoire static/schedule/fullcalendar de notre app schedule.
schedule/
├── static
│ └── schedule
│ ├── fullcalendar
│ │ ├── fullcalendar.css
│ │ ├── fullcalendar.js
│ │ ├── fullcalendar.min.js
│ │ ├── fullcalendar.print.css
│ │ └── gcal.js
│ └── js
│ ├── jquery-1.7.1.min.js
│ └── jquery-ui-1.8.17.custom.min.js
├── ...
└── views.py
Mise en place du template¶
On va récupèrer le template agenda-views.html et le configurer pour Django
schedule/
├── templates
│ └── schedule
│ └── base.html
├── ...
└── views.py
base.html
{% load static from staticfiles %}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<link rel='stylesheet' type='text/css' href='{% static 'schedule/fullcalendar/fullcalendar.css' %}' />
<link rel='stylesheet' type='text/css' href='{% static 'schedule/fullcalendar/fullcalendar.print.css' %}' media='print' />
<script type='text/javascript' src='{% static 'schedule/js/jquery-1.7.1.min.js' %}'></script>
<script type='text/javascript' src='{% static 'schedule/js/jquery-ui-1.8.17.custom.min.js' %}'></script>
<script type='text/javascript' src='{% static 'schedule/fullcalendar/fullcalendar.min.js' %}'></script>
<script type='text/javascript'>
$(document).ready(function() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: true,
events: [
{
title: 'All Day Event',
start: new Date(y, m, 1)
},
{
title: 'Long Event',
start: new Date(y, m, d-5),
end: new Date(y, m, d-2)
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d-3, 16, 0),
allDay: false
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d+4, 16, 0),
allDay: false
},
{
title: 'Meeting',
start: new Date(y, m, d, 10, 30),
allDay: false
},
{
title: 'Lunch',
start: new Date(y, m, d, 12, 0),
end: new Date(y, m, d, 14, 0),
allDay: false
},
{
title: 'Birthday Party',
start: new Date(y, m, d+1, 19, 0),
end: new Date(y, m, d+1, 22, 30),
allDay: false
},
{
title: 'Click for Google',
start: new Date(y, m, 28),
end: new Date(y, m, 29),
url: 'http://google.com/'
}
]
});
});
</script>
<style type='text/css'>
body {
margin-top: 40px;
text-align: center;
font-size: 14px;
font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
}
#calendar {
width: 900px;
margin: 0 auto;
}
</style>
</head>
<body>
<div id='calendar'></div>
</body>
</html>
Vérification du template avec TemplateView¶
On créé le fichier d’URLs :
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
urlpatterns = patterns('',
url(r'^$', TemplateView.as_view(template_name="schedule/base.html"), name='schedule'),
)
On le lie au fichier principal :
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from django.views.generic import RedirectView
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', RedirectView.as_view(url='todo/')),
url(r'^grappelli/', include('grappelli.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^todo/', include('todo.urls')),
url(r'^schedule/', include('schedule.urls')),
)
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()