Django Cheat Sheet
The django tutorials are quite good. The goal of this cheat sheet is to create a quick start guide so that after reading the tuts over once or twice you have a more handy reference. Things in this guide are done the 'right' way with generic views and templates right off the bat. Please please add to this page.
(It would be great if some of the stuff from this page could later be rolled in to the startproject command and handled automatically - SimonWillison)
Starting a project…
django-admin.py startproject AcmeIntranet cd AcmeIntranet mkdir templates mkdir media
settings.py
- edit your database settings
- set path to media dir ( e.g. /home/joe/AcmeIntranet/media )
- media contains public files such as css and js files
- set path to template dir
- templates contains django html templates
- your applications will likely have their own template dirs. Remember to add those as you create them
python manage.py syncdb
Creating an invoices application…
python manage.py startapp invoices
add 'AcmeIntranet.invoices', to INSTALLED_APPS list in settings.py
Create your data model
from django.db import models
from django.contrib.auth.models import User
class Ticket (models.Model):
user = models.ForeignKey (User)
case_number = models.IntegerField()
dollar_amount = models.DecimalField('Cost (in dollars)', max_digits=10, decimal_places=2)
see: model api, model examples
validate your model and commit to database:
python manage.py validate python manage.py sql invoices python manage.py syncdb
Design your urls
in the project root directory, edit urls.py:
(r'^invoices/', include('AcmeIntranet.invoices.urls')),
in the invoices app directory create urls.py:
from django.conf.urls.defaults import *
from models import Ticket
info_dict = {
'queryset': Ticket.objects.all()
}
urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', info_dict),
(r'^new/$', 'django.views.generic.create_update.create_object', { 'model': Ticket } ),
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
)
see: generic views
Create your templates
First create Acme_base.html in templates
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
Next create invoice_list.html in templates/invoices
{% extends "Acme_base.html" %}
{% block title %} Listing Invoices {% endblock %}
{% block content %}
{% for invoice in object_list %}
<p>{{ invoice.dollar_amount }}</p>
{% endfor %}
{% endblock %}
See also:
and if you are a mindmap fan: http://code.djangoproject.com/wiki/MindmapCheatsheetForGenericViewsAPI
