introduction to django in five slides
DESCRIPTION
a brief introduction to Django in five slides. presented during a pre-conference session at code4lib 2010 in Asheville, NC. presenting again at code4lib 2011 NDNP pre-pre-conference in Bloomington, IN.TRANSCRIPT
![Page 1: introduction to Django in five slides](https://reader037.vdocument.in/reader037/viewer/2022100405/5495a581b479596a4d8b4da2/html5/thumbnails/1.jpg)
Djangoin a whirlwind
![Page 2: introduction to Django in five slides](https://reader037.vdocument.in/reader037/viewer/2022100405/5495a581b479596a4d8b4da2/html5/thumbnails/2.jpg)
URL routing
# Entriesurl(r'^entry/(?P<entry_id>[0-9]+)/$', 'entry', name='entry'),url(r'^entry/new', 'entry_new', name='entry_new'),url(r'^entry/(?P<entry_id>[0-9]+)/edit/$', 'entry_edit', name='entry_edit'),url(r'^entry/(?P<entry_id>[0-9]+)/delete/$', 'entry_delete', name='entry_delete'),
# Tags (site-wide)url(r'^tags/$', 'tags', name='tags'),url(r'^tag/(?P<tag_name>[+\w:._-]+)/$', 'tag', name='tag'),url(r'^tag/(?P<tag_name>[+\w:._-]+)/feed/$', 'tag_feed',
name='tag_feed'),
![Page 3: introduction to Django in five slides](https://reader037.vdocument.in/reader037/viewer/2022100405/5495a581b479596a4d8b4da2/html5/thumbnails/3.jpg)
models
class EntryTag (m.Model): entry = m.ForeignKey('Entry', related_name='tags', db_index=True) tag = m.ForeignKey(Tag, related_name='entries', db_index=True) sequence_num = m.SmallIntegerField(default=0, db_index=True)
class Meta: unique_together = ['entry', 'tag', 'sequence_num'] ordering = ['sequence_num']
![Page 4: introduction to Django in five slides](https://reader037.vdocument.in/reader037/viewer/2022100405/5495a581b479596a4d8b4da2/html5/thumbnails/4.jpg)
viewsdef tags (request): context = RequestContext(request) qs = m.EntryTag.objects.filter(entry__user__userprofile__is_private=False) qs = qs.exclude(entry__is_private=True) if request.user.is_authenticated(): qs = apply_user_filters_to_entry_tags(request, qs) qs = qs.values('tag__name').annotate(Count('tag')) qs_count = qs.order_by('-tag__count') count_paginator, count_page = pagify(request, qs_count) qs_alpha = qs.order_by('tag__name') alpha_paginator, alpha_page = pagify(request, qs_alpha) return render_to_response('tags.html', { 'paginator': count_paginator, 'page': count_page, 'alpha_paginator': alpha_paginator, 'alpha_page': alpha_page, }, context)
![Page 5: introduction to Django in five slides](https://reader037.vdocument.in/reader037/viewer/2022100405/5495a581b479596a4d8b4da2/html5/thumbnails/5.jpg)
templates<td width='50%' valign='top'> <h3>Sorted by count</h3> <table id='tags' class='gentable' cellspacing='1'> <tbody> {% for pair in page.object_list %}
<tr> <th valign='top'>{{ pair.tag__count }}</th> {% if browse_user %}
<td class='coll1' valign='top'><a rel='tag' href='{% url user_tag browse_user.username,pair.tag__name %}'>{{ pair.tag__name }}</a></td> {% else %}
<td class='coll1' valign='top'><a rel='tag' href='{% url tag pair.tag__name %}'>{{ pair.tag__name }}</a></td> {% endif %}
</tr> {% endfor %} </tbody> </table></td>
![Page 6: introduction to Django in five slides](https://reader037.vdocument.in/reader037/viewer/2022100405/5495a581b479596a4d8b4da2/html5/thumbnails/6.jpg)
advantages
• easy to learn
• healthy community
• plays well with markup gurus
• keeps getting better
• free as in speech