diff --git a/core/admin.py b/core/admin.py new file mode 100644 index 0000000..eea9019 --- /dev/null +++ b/core/admin.py @@ -0,0 +1,12 @@ +from django.contrib import admin +from core.models import Speaker, Contact + +class ContactInline(admin.TabularInline): + model = Contact + extra = 1 + +class SpeakerAdmin(admin.ModelAdmin): + inlines = [ContactInline,] + prepopulated_fields = {'slug': ('name', )} + +admin.site.register(Speaker, SpeakerAdmin) diff --git a/core/models.py b/core/models.py index b096caa..9b9db62 100644 --- a/core/models.py +++ b/core/models.py @@ -1,4 +1,85 @@ from django.db import models +from django.utils.translation import ugettext as _ +import datetime -# Create your models here. +class Speaker(models.Model): + name = models.CharField(max_length=255) + slug = models.SlugField() + url = models.URLField(verify_exists=False) + description = models.TextField(blank=True) + avatar = models.FileField(upload_to='palestrantes', blank=True, null=True) + + class Meta: + verbose_name = 'Palestrante' + verbose_name_plural = 'Palestrantes' + + def __unicode__(self): + return self.name + +class KindContactManager(models.Manager): + def __init__(self, kind): + super(KindContactManager, self).__init__() + self.kind = kind + + def get_query_set(self): + qs = super(KindContactManager, self).get_query_set() + qs.filter = kind=self.kind + return qs + +class Contact(models.Model): + KINDS = ( + ('P', _('Telefone')), + ('E', _('E-mail')), + ('F', _('Fax'))) + speaker = models.ForeignKey(Speaker, verbose_name=_('Palestrante')) + kind = models.CharField(max_length=1, choices=KINDS) + value = models.CharField(max_length=255) + + objects = models.Manager() + phones = KindContactManager('P') + emails = KindContactManager('E') + faxes = KindContactManager('F') + + class Meta: + verbose_name = 'Contato' + verbose_name_plural = 'Contatos' + +class PeriodManager(models.Manager): + midday = datetime.time(12) + + def at_morning(self): + qs = self.filter(start_time__lt=self.midday) + qs = self.order_by('start_time') + return qs + + def at_afternoon(self): + qs = self.filter(start_time__gt=self.midday) + qs = self.order_by('start_time') + return qs +class Talk(models.Model): + title = models.CharField(max_length=200) + description = models.TextField() + start_time = models.TimeField(blank=True) + speakers = models.ManyToManyField('Speaker', verbose_name=_('palestrante')) + + objects = PeriodManager() + + class Meta: + verbose_name = 'Palestra' + verbose_name_plural = 'Palestras' + + def __unicode__(self): + return unicode(self.title) + +class Course(Talk): + slots = models.IntegerField() + notes = models.TextField() + + class Meta: + verbose_name = 'Curso' + verbose_name = 'Cursos' + + + + diff --git a/core/views.py b/core/views.py index 2fc514d..77a2e17 100644 --- a/core/views.py +++ b/core/views.py @@ -1,10 +1,24 @@ # Create your views here. from django.http import HttpResponse -from django.shortcuts import render_to_response +from django.shortcuts import render_to_response, get_object_or_404 +from django.views.generic.simple import direct_to_template from django.template import RequestContext +from core.models import Talk def homepage(request): context = RequestContext(request) return render_to_response('homepage.html', context) + +def speaker(request, slug): + speaker = get_object_or_404(Speaker, slug=slug) + context = RequestContext(request, {'speaker': speaker}) + return render_to_response('core/speaker.html', context) + +def talks(request): + return direct_to_template(request, 'core/talks.html', { + 'morning_talks': Talk.objects.at_morning(), + 'afternoon_talks': Talk.objects.at_afternoon(), }) + + diff --git a/database.db b/database.db index 42691d0..71e45c5 100644 Binary files a/database.db and b/database.db differ diff --git a/templates/core/speaker.html b/templates/core/speaker.html new file mode 100644 index 0000000..7be301b --- /dev/null +++ b/templates/core/speaker.html @@ -0,0 +1,12 @@ +{% extends 'master.html' %} + {% block content %} + + {% if speaker.avatar %} +

+ {{ speaker.name }} +

+ {% endif %} +

{{ speaker.name }}

+

{{ speaker.description

+{% endblock content %} + diff --git a/templates/core/talks.html b/templates/core/talks.html new file mode 100644 index 0000000..553e237 --- /dev/null +++ b/templates/core/talks.html @@ -0,0 +1,17 @@ +{% extends 'master.html' %} + {% block content %} +

Manhã

+ {% for talk in morning_talks %} + {% include 'core/talks_snippet.html' %} + {% empty %} +

Não existem palestras durante a manhã.

+ {% endfor %} +
+

Tarde

+ {% for talk in afternoon_talks %} + {% include 'core/talks_snippet.html' %} + {% empty %} +

Não existem palestras durante a tarde.

+ {% endfor %} +{% endblock content %} + diff --git a/templates/core/talks_snippet.html b/templates/core/talks_snippet.html new file mode 100644 index 0000000..a599722 --- /dev/null +++ b/templates/core/talks_snippet.html @@ -0,0 +1,12 @@ +
+

+{{ talk.start_time }} - {{ talk.title }}

+{% for speaker in talk.speaker.all %} +
+ {{ speaker.name }} +
+{% endfor %} +

{{ talk.description }}

+
+ diff --git a/templates/master.html b/templates/master.html index 04771ca..51a9601 100644 --- a/templates/master.html +++ b/templates/master.html @@ -30,6 +30,7 @@

EventeX

diff --git a/urls.py b/urls.py index da53c78..7f09113 100644 --- a/urls.py +++ b/urls.py @@ -19,3 +19,7 @@ # Uncomment the next line to enable the admin: (r'^admin/', include(admin.site.urls)), ) + +urlpatterns += patterns('core.views', + url(r'^palestrante/([-\w]+)/$', 'speaker', name='speaker'), + url(r'^palestras/$', 'talks', name='talks'),)