Tải bản đầy đủ (.pdf) (538 trang)

IT training the definitive guide to django web development done right (2nd ed ) holovaty kaplan moss 2009 07 01

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.93 MB, 538 trang )

 CYAN
 MAGENTA

 YELLOW
  BLACK
 PANTONE 123 C

Books for professionals by professionals ®

The EXPERT’s VOIce ® in Web Development
Companion
eBook Available

Web Development Done Right, Second Edition
Dear Reader,

Adrian Holovaty and Jacob Kaplan-Moss

Beginning Python

54499

Holovaty,
Kaplan-Moss

ISBN 978-1-4302-1936-1

US $44.99

Adrian Holovaty
and Jacob Kaplan-Moss


Benevolent Dictators for Life, Django

Shelve in
Web Development
User level:
Beginner–Intermediate

Django is a framework that saves you
time and makes Web development a joy

Second Edition

The Definitive Guide to
Django, Second Edition



Web Development Done Right

Pro Django

SOURCE CODE ONLINE

www.apress.com

The Definitive Guide to

Updated for
Django 1.1


Practical Django
Projects, Second Edition

See last page for details
on $10 eBook version

Django 1.1

Second
Edition

THE APRESS ROADMAP
Companion eBook

Django

This book is about Django, a Web development framework that saves you time
and makes Web development a joy. Using Django, you can build and maintain
high-quality Web applications with minimal fuss.
At its best, Web development is an exciting, creative act; at its worst, it can be a
repetitive, frustrating nuisance. Django lets you focus on the fun stuff—the crux of
your Web application—while easing the pain of the repetitive bits. In doing so, it
provides high-level abstractions of common Web development patterns, shortcuts
for frequent programming tasks, and clear conventions for how to solve problems.
At the same time, Django tries to stay out of your way, letting you work outside
the scope of the framework as needed.
The goal of this book is to make you a Django expert. The focus is twofold.
First, we explain, in depth, what Django does and how to build Web applications
with it. Second, we discuss higher-level concepts where appropriate, answering
the question, “How can I apply these tools effectively in my own projects?” By

reading this book, you’ll learn the skills needed to develop powerful Web sites
quickly with code that is clean and easy to maintain.
Since we wrote the first edition of this book there have been substantial
backward-incompatible changes to Django. This edition of the book is updated
to cover Django 1.1 and should serve you well for some time.

The Definitive
Guide to

The Definitive Guide to Django:

Updated for

9 781430 219361

this print for content only—size & color not accurate

spine = 1.024" 536 page count



The Definitive Guide
to Django
Web Development Done Right,
Second Edition

Adrian Holovaty and Jacob Kaplan-Moss

19361fm.indd 1


6/16/09 3:15:00 PM


The Definitive Guide to Django: Web Development Done Right, Second Edition
Copyright © 2009 by Adrian Holovaty and Jacob Kaplan-Moss
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.
ISBN 13: 978-1-4302-1936-1
ISBN (electronic): 978-1-4302-1937-8
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence
of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark
owner, with no intention of infringement of the trademark.
Java™ and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc., in the
US and other countries. Apress, Inc., is not affiliated with Sun Microsystems, Inc., and this book was written without endorsement from Sun Microsystems, Inc.
Lead Editor: Duncan Parkes
Technical Reviewer: Sean Legassick
Editorial Board: Clay Andres, Steve Anglin, Mark Beckner, Ewan Buckingham, Tony Campbell,
Gary Cornell, Jonathan Gennick, Michelle Lowman, Matthew Moodie, Jeffrey Pepper, Frank Pohlmann,
Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh
Project Managers: Grace Wong and James Markham
Copy Editors: Nancy Sixsmith and Candace English
Associate Production Director: Kari Brooks-Copony
Production Editor: Katie Stence
Compositor: Patrick Cunningham
Proofreader: April Eddy
Indexer: BIM Indexing & Proofreading Services
Artist: April Milne
Cover Designer: Kurt Krames

Manufacturing Director: Tom Debolski
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,
New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail , or
visit .
For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600,
Berkeley, CA 94705. Phone 510-549-5930, fax 510-549-5939, e-mail , or visit http://www.
apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use.
eBook versions and licenses are also available for most titles. For more information, reference our Special
Bulk Sales–eBook Licensing web page at />The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability
to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work.
The source code for this book is available to readers at .

19361fm.indd 2

6/16/09 3:15:00 PM


This book is dedicated to the Django community.

19361fm.indd 3

6/16/09 3:15:00 PM


Contents at a Glance
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxv

PART 1

■■■

Getting Started

Chapter 1

Introduction to Django. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Chapter 2

Getting Started. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Chapter 3

Views and URLconfs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Chapter 4

Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Chapter 5

Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Chapter 6


The Django Admin Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Chapter 7

Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

PART 2

■■■

Advanced Usage

Chapter 8

Advanced Views and URLconfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

Chapter 9

Advanced Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Chapter 10

Advanced Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Chapter 11

Generic Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Chapter 12


Deploying Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

iv

19361fm.indd 4

6/16/09 3:15:00 PM


PART 3

■■■

Other Django Features

Chapter 13

Generating Non-HTML Content. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

Chapter 14

Sessions, Users, and Registration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

Chapter 15

Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Chapter 16

django.contrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291


Chapter 17

Middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

Chapter 18

Integrating with Legacy Databases and Applications. . . . . . . . . . . . 317

Chapter 19

Internationalization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Chapter 20

Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

PART 4

■■■

Appendixes

Appendix A

Model Definition Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

Appendix B

Database API Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369


Appendix C

Generic View Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

Appendix D

Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

Appendix E

Built-in Template Tags and Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

Appendix F

The django-admin Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

Appendix G

Request and Response Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479

v

19361fm.indd 5

6/16/09 3:15:00 PM



19361fm.indd 6

6/16/09 3:15:00 PM


Contents
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxv

PART 1
Chapter 1

Chapter 2

■■■

Getting Started

Introduction to Django. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

What Is a Web Framework?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The MVC Design Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Django's History. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How to Read This Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Required Programming Knowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Required Python Knowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Required Django Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Getting Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
5
7
8
8
8
9
9
9

Getting Started. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

Installing Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Python Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installing Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installing an Official Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installing the Trunk Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Testing the Django Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
11
12

12
12
13
14

vii

19361fm.indd 7

6/16/09 3:15:00 PM


viii

■CO NTENT S

Chapter 3

Chapter 4

19361fm.indd 8

Setting Up a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Django with PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Django with SQLite 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Django with MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Django with Oracle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Django Without a Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Starting a Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Running the Development Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

What's Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
16
16
17
17
17
17
18
19

Views and URLconfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

Your First Django-Powered Page: Hello World. . . . . . . . . . . . . . . . . . . . . . .
Your First View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Your First URLconf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Quick Note About 404 Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Quick Note About the Site Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How Django Processes a Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Your Second View: Dynamic Content. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
URLconfs and Loose Coupling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Your Third View: Dynamic URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Django’s Pretty Error Pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What's Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21
21

22
26
27
28
28
31
31
35
37

Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

Template-System Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Template System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating Template Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rendering a Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multiple Contexts, Same Template. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Context Variable Lookup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Playing with Context Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Basic Template Tags and Filters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Filters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Philosophies and Limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Templates in Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

40
41
42

43
45
46
49
50
50
56
57
58

6/16/09 3:15:00 PM


■C O N T E N T S

Chapter 5

Template Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
render_to_response() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The locals() Trick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Subdirectories in get_template(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The include Template Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Template Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What's Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

60
63
63
64
65

66
70

Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

71

ix

The “Dumb” Way to Do Database Queries in Views . . . . . . . . . . . . . . . . . . 71
The MTV (or MVC) Development Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Configuring the Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Your First App. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Defining Models in Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Your First Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Installing the Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Basic Data Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Adding Model String Representations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Inserting and Updating Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Selecting Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Filtering Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Retrieving Single Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Ordering Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Chaining Lookups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Slicing Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Updating Multiple Objects in One Statement. . . . . . . . . . . . . . . . . . . . 92
Deleting Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
What's Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Chapter 6


The Django Admin Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

95

The django.contrib Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Activating the Admin Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Using the Admin Site. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Adding Your Models to the Admin Site. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
How the Admin Site Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Making Fields Optional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Making Date and Numeric Fields Optional . . . . . . . . . . . . . . . . . . . . 104
Customizing Field Labels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

19361fm.indd 9

6/16/09 3:15:00 PM


x

■CO NTENT S

Chapter 7

PART 2
Chapter 8

19361fm.indd 10


Custom ModelAdmin Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Customizing Change Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Customizing Edit Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Users, Groups, and Permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
When and Why to Use the Admin Interface—And When Not To. . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

106
106
112
116
117
118

Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

119

Getting Data from the Request Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Information About the URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Other Information About the Request. . . . . . . . . . . . . . . . . . . . . . . . .
Information About Submitted Data . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Simple Form-Handling Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Improving Our Simple Form-Handling Example. . . . . . . . . . . . . . . . . . . . .
Simple Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Making a Contact Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Your First Form Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tying Form Objects into Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Changing How Fields Are Rendered. . . . . . . . . . . . . . . . . . . . . . . . . .
Setting a Maximum Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Setting Initial Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Adding Custom Validation Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Specifying Labels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Customizing Form Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

119
119
120
121
122
125
127
129
133
136
137
137
138
138
139
139
141

■■■

Advanced Usage

Advanced Views and URLconfs . . . . . . . . . . . . . . . . . . . . . . . . . . .


145

URLconf Tricks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Streamlining Function Imports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Multiple View Prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Special-Casing URLs in Debug Mode. . . . . . . . . . . . . . . . . . . . . . . . .
Using Named Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Understanding the Matching/Grouping Algorithm . . . . . . . . . . . . . .
Passing Extra Options to View Functions. . . . . . . . . . . . . . . . . . . . . .
Using Default View Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

145
145
147
148
148
150
150
155

6/16/09 3:15:01 PM


■C O N T E N T S

Chapter 9

19361fm.indd 11

Special-Casing Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Capturing Text in URLs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Determining What the URLconf Searches Against. . . . . . . . . . . . . .
Higher-Level Abstractions of View Functions . . . . . . . . . . . . . . . . . .
Wrapping View Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Including Other URLconfs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How Captured Parameters Work with include() . . . . . . . . . . . . . . . .
How Extra URLconf Options Work with include() . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

156
157
158
158
161
162
163
164
165

Advanced Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

167

Template Language Review. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RequestContext and Context Processors. . . . . . . . . . . . . . . . . . . . . . . . . . .
django.core.context_processors.auth . . . . . . . . . . . . . . . . . . . . . . . .
django.core.context_processors.debug. . . . . . . . . . . . . . . . . . . . . . .
django.core.context_processors.i18n . . . . . . . . . . . . . . . . . . . . . . . .
django.core.context_processors.request. . . . . . . . . . . . . . . . . . . . . .
Guidelines for Writing Your Own Context Processors . . . . . . . . . . .

Automatic HTML Escaping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How to Turn It Off. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Automatic Escaping of String Literals in Filter Arguments. . . . . . .
Inside Template Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Extending the Template System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating a Template Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Writing Custom Template Filters. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Writing Custom Template Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Writing the Compilation Function . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Writing the Template Node. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Registering the Tag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Setting a Variable in the Context. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Parsing Until Another Template Tag. . . . . . . . . . . . . . . . . . . . . . . . . .
Parsing Until Another Template Tag and Saving Contents. . . . . . .
Shortcut for Simple Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inclusion Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Writing Custom Template Loaders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuring the Template System in Standalone Mode . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

167
168
171
171
172
172
172
173
174

175
176
176
177
177
178
180
180
182
182
183
184
185
185
186
188
189
190

xi

6/16/09 3:15:01 PM


xii

■CO NTENT S

Chapter 10


Advanced Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

191

Related Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Accessing Foreign Key Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Accessing Many-to-Many Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Making Changes to a Database Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Adding Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Removing Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Removing Many-to-Many Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Removing Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Adding Extra Manager Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Modifying Initial Manager QuerySets . . . . . . . . . . . . . . . . . . . . . . . . . 198
Model Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Executing Raw SQL Queries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

Chapter 11

Chapter 12

Generic Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

203

Using Generic Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic Views of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Extending Generic Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Making “Friendly” Template Contexts. . . . . . . . . . . . . . . . . . . . . . . .
Adding Extra Context. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Viewing Subsets of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Complex Filtering with Wrapper Functions . . . . . . . . . . . . . . . . . . . .
Performing Extra Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

204
205
207
207
208
209
210
211
212

Deploying Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

213

Preparing Your Codebase for Production. . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Turning Off Debug Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Turning Off Template Debug Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Implementing a 404 Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Implementing a 500 Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Setting Up Error Alerts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Setting Up Broken Link Alerts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Using Different Settings for Production. . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
DJANGO_SETTINGS_MODULE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217


19361fm.indd 12

6/16/09 3:15:01 PM


■C O N T E N T S

xiii

Using Django with Apache and mod_python . . . . . . . . . . . . . . . . . . . . . . . 218
Basic Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Running Multiple Django Installations on
the Same Apache Instance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Running a Development Server with mod_python. . . . . . . . . . . . . . 220
Serving Django and Media Files from
the Same Apache Instance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Error Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Handling a Segmentation Fault. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
An Alternative: mod_wsgi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Using Django with FastCGI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
FastCGI Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Running Your FastCGI Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Using Django with Apache and FastCGI. . . . . . . . . . . . . . . . . . . . . . . 224
FastCGI and lighttpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Running Django on a Shared-Hosting Provider with Apache. . . . . 227
Scaling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Running on a Single Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Separating Out the Database Server . . . . . . . . . . . . . . . . . . . . . . . . . 229
Running a Separate Media Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

Implementing Load Balancing and Redundancy . . . . . . . . . . . . . . . 230
Going Big. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Performance Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
There’s No Such Thing As Too Much RAM . . . . . . . . . . . . . . . . . . . . 233
Turn Off Keep-Alive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Use Memcached. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Use Memcached Often . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Join the Conversation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

PART 3

■■■

Chapter 13

Other Django Features

Generating Non-HTML Content. . . . . . . . . . . . . . . . . . . . . . . . . . . .

237

The Basics: Views and MIME Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Producing CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Generating PDFs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Installing ReportLab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Writing Your View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Complex PDFs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

19361fm.indd 13


6/16/09 3:15:01 PM


xiv

■CO NTENT S

Chapter 14

19361fm.indd 14

Other Possibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Syndication-Feed Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Initialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Simple Feed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A More Complex Feed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Specifying the Type of Feed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Enclosures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Language. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
URLs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Publishing Atom and RSS Feeds in Tandem. . . . . . . . . . . . . . . . . . .
The Sitemap Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Initialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sitemap Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Shortcuts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating a Sitemap Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pinging Google. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What's Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


242
242
243
244
245
247
247
248
248
248
249
249
250
250
251
252
253
254

Sessions, Users, and Registration . . . . . . . . . . . . . . . . . . . . . . . .

255

Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Getting and Setting Cookies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Mixed Blessing of Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Django’s Session Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Enabling Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Sessions in Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Setting Test Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Sessions Outside of Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
When Sessions Are Saved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Browser-Length Sessions vs. Persistent Sessions. . . . . . . . . . . . . .
Other Session Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Users and Authentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Enabling Authentication Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Logging In and Out. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Limiting Access to Logged-in Users. . . . . . . . . . . . . . . . . . . . . . . . . .
Limiting Access to Users Who Pass a Test . . . . . . . . . . . . . . . . . . . .
Managing Users, Permissions, and Groups. . . . . . . . . . . . . . . . . . . .
Using Authentication Data in Templates . . . . . . . . . . . . . . . . . . . . . .

255
256
257
258
258
259
261
261
262
262
263
264
264
265
267
269

269
271
273

6/16/09 3:15:01 PM


■C O N T E N T S

Chapter 15

Permissions, Groups, and Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

274
274
275
275
276

Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

277

xv

Setting Up the Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Memcached . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Database Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Filesystem Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Local-Memory Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Dummy Caching (for Development) . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Using a Custom Cache Back-End. . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
CACHE_BACKEND Arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
The Per-Site Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
The Per-View Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Specifying Per-View Cache in the URLconf. . . . . . . . . . . . . . . . . . . . 283
Template Fragment Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
The Low-Level Cache API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Upstream Caches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Using Vary Headers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Controlling Cache: Using Other Headers. . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Other Optimizations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Order of MIDDLEWARE_CLASSES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Chapter 16

django.contrib. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

291

The Django Standard Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Sites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Scenario 1: Reusing Data on Multiple Sites . . . . . . . . . . . . . . . . . . . 293
Scenario 2: Storing Your Site Name/Domain in One Place. . . . . . . 293
How to Use the Sites Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

The Sites Framework’s Capabilities. . . . . . . . . . . . . . . . . . . . . . . . . . 294
CurrentSiteManager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
How Django Uses the Sites Framework. . . . . . . . . . . . . . . . . . . . . . . 298
Flatpages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Using Flatpages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Adding, Changing, and Deleting Flatpages. . . . . . . . . . . . . . . . . . . . 301
Using Flatpage Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

19361fm.indd 15

6/16/09 3:15:01 PM


xvi

■CO NTENT S

Chapter 17

19361fm.indd 16

Redirects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Redirects Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Adding, Changing, and Deleting Redirects . . . . . . . . . . . . . . . . . . . .
CSRF Protection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Simple CSRF Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A More Complex CSRF Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Preventing CSRF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Humanizing Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
apnumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

intcomma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
intword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ordinal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Markup Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

302
302
303
304
304
304
304
306
306
306
306
307
307
307

Middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

309

What’s Middleware?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Middleware Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Middleware Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Initializer: __init__(self) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Request Preprocessor: process_request(self, request). . . . . . . . . .

View Preprocessor: process_view(self, request, view,
args, kwargs). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Response Postprocessor: process_response(self,
request, response) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exception Postprocessor: process_exception(self,
request, exception). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Built-in Middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Authentication Support Middleware. . . . . . . . . . . . . . . . . . . . . . . . . .
“Common” Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compression Middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conditional GET Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reverse Proxy Support (X-Forwarded-For Middleware) . . . . . . . . .
Session Support Middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sitewide Cache Middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

309
310
311
311
311
311
312
312
313
313
313
314
314

314
315
315
315
315

6/16/09 3:15:01 PM


■C O N T E N T S

Chapter 18

Chapter 19

Chapter 20

19361fm.indd 17

Integrating with Legacy Databases and Applications. . .

317

Integrating with a Legacy Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using inspectdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cleaning Up Generated Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Integrating with an Authentication System. . . . . . . . . . . . . . . . . . . . . . . . .
Specifying Authentication Back-Ends. . . . . . . . . . . . . . . . . . . . . . . . .
Writing an Authentication Back-End. . . . . . . . . . . . . . . . . . . . . . . . . .
Integrating with Legacy Web Applications . . . . . . . . . . . . . . . . . . . . . . . . .

What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

317
317
318
319
319
319
321
322

Internationalization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

323

How to Specify Translation Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
In Python Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
In Template Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Working with Lazy Translation Objects . . . . . . . . . . . . . . . . . . . . . . .
How to Create Language Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compiling Message Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How Django Discovers Language Preference. . . . . . . . . . . . . . . . . . . . . . .
Using Translations in Your Own Projects. . . . . . . . . . . . . . . . . . . . . . . . . . .
The set_language Redirect View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Translations and JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The javascript_catalog View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the JavaScript Translation Catalog . . . . . . . . . . . . . . . . . . . . .
Creating JavaScript Translation Catalogs . . . . . . . . . . . . . . . . . . . . .
Notes for Users Familiar with gettext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

gettext on Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

324
324
327
329
330
330
332
333
335
336
337
337
337
339
339
339
340

Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

341

The Theme of Web Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cross-Site Scripting (XSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Cross-Site Request Forgery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Forging/Hijacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

341
342
343
343
344
345
345
346

xvii

6/16/09 3:15:01 PM


xviii

■CO NTENT S

E-mail Header Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Directory Traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exposed Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Final Word on Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


PART 4

■■■

Appendix A

19361fm.indd 18

347
347
347
348
349
349
349
349

Appendixes

Model Definition Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

353

Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AutoField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BooleanField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CharField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CommaSeparatedIntegerField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DateField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DateTimeField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DecimalField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EmailField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FileField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FilePathField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FloatField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ImageField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IntegerField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IPAddressField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NullBooleanField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PositiveIntegerField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PositiveSmallIntegerField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SlugField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SmallIntegerField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TimeField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
URLField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XMLField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

353
354
354
354
354
355
355
355
355
355
357

357
357
358
358
358
358
358
358
358
358
358
359
359

6/16/09 3:15:01 PM


■C O N T E N T S

xix

Universal Field Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
blank. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
choices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
db_column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
db_index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
db_tablespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
editable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

help_text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
primary_key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
unique_for_date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
unique_for_month. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
unique_for_year. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
verbose_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
ForeignKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
ManyToManyField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
OneToOneField. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Model Metadata Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
db_table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
db_tablespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
get_latest_by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
managed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
ordering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
proxy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
unique_together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
verbose_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
verbose_name_plural. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

Appendix B

Database API Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

369

Creating Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

What Happens When You Save?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Autoincrementing Primary Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Saving Changes to Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Retrieving Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Caching and QuerySets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

19361fm.indd 19

6/16/09 3:15:01 PM


xx

■CO NTENT S

Appendix C

19361fm.indd 20

Filtering Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chaining Filters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Limiting QuerySets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Query Methods That Return New QuerySets. . . . . . . . . . . . . . . . . . .
QuerySet Methods That Do Not Return QuerySets. . . . . . . . . . . . . .
Field Lookups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
exact. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iexact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
contains. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
icontains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gt, gte, lt, and lte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
startswith. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
istartswith. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
endswith and iendswith . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
year, month, and day . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
isnull. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The pk Lookup Shortcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Complex Lookups with Q Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Related Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lookups That Span Relationships. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Foreign-Key Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
“Reverse” Foreign-Key Relationships . . . . . . . . . . . . . . . . . . . . . . . .
Many-to-Many Relationships. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Queries over Related Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Deleting Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Shortcuts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
get_object_or_404() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
get_list_or_404(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Falling Back to Raw SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

373
374
375
376
379
382
382
382

382
383
383
383
384
384
384
384
384
385
385
385
385
387
387
387
388
390
391
391
392
392
392
393

Generic View Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

395

Common Arguments to Generic Views . . . . . . . . . . . . . . . . . . . . . . . . . . . .

“Simple” Generic Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rendering a Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Redirecting to Another URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

395
396
396
397

6/16/09 3:15:02 PM


■C O N T E N T S

Appendix D

List/Detail Generic Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lists of Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Detail Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Date-Based Generic Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Archive Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Year Archives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Month Archives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Week Archives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Day Archives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Archive for Today. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Date-Based Detail Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

397
397

400
401
402
403
404
406
408
409
409

Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

413

xxi

The Basics of Settings Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Seeing Which Settings You’ve Changed . . . . . . . . . . . . . . . . . . . . . . 414
Using Settings in Python Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Altering Settings at Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Creating Your Own Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Designating the Settings: DJANGO_SETTINGS_MODULE. . . . . . . . . . . . . 415
The django-admin.py Utility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
On the Server (mod_python) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Using Settings Without Setting DJANGO_SETTINGS_MODULE. . . . . . . . 416
Custom Default Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Either configure() or DJANGO_SETTINGS_MODULE Is Required. . 417
Available Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

ABSOLUTE_URL_OVERRIDES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
ADMIN_MEDIA_PREFIX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
ADMINS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
ALLOWED_INCLUDE_ROOTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
APPEND_SLASH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
CACHE_BACKEND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
CACHE_MIDDLEWARE_KEY_PREFIX. . . . . . . . . . . . . . . . . . . . . . . . . . 418
DATABASE_ENGINE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
DATABASE_HOST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
DATABASE_NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
DATABASE_OPTIONS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
DATABASE_PASSWORD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
DATABASE_PORT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

19361fm.indd 21

6/16/09 3:15:02 PM


xxii

■CO NTENT S

DATABASE_USER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATE_FORMAT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATETIME_FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DEFAULT_CHARSET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DEFAULT_CONTENT_TYPE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DEFAULT_FROM_EMAIL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DISALLOWED_USER_AGENTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EMAIL_HOST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EMAIL_HOST_PASSWORD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EMAIL_HOST_USER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EMAIL_PORT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EMAIL_SUBJECT_PREFIX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FIXTURE_DIRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IGNORABLE_404_ENDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IGNORABLE_404_STARTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INSTALLED_APPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LANGUAGE_CODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LANGUAGES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MANAGERS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MEDIA_ROOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MEDIA_URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIDDLEWARE_CLASSES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MONTH_DAY_FORMAT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREPEND_WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ROOT_URLCONF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SECRET_KEY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SEND_BROKEN_LINK_EMAILS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SERIALIZATION_MODULES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SERVER_EMAIL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SESSION_COOKIE_AGE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SESSION_COOKIE_DOMAIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SESSION_COOKIE_NAME. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SESSION_COOKIE_SECURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SESSION_EXPIRE_AT_BROWSER_CLOSE. . . . . . . . . . . . . . . . . . . . .
SESSION_SAVE_EVERY_REQUEST. . . . . . . . . . . . . . . . . . . . . . . . . . .
SITE_ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

TEMPLATE_CONTEXT_PROCESSORS. . . . . . . . . . . . . . . . . . . . . . . . .
TEMPLATE_DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TEMPLATE_DIRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TEMPLATE_LOADERS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19361fm.indd 22

419
419
420
420
420
420
420
420
421
421
421
421
421
421
421
422
422
422
422
423
423
423
423

423
424
424
424
424
424
424
424
425
425
425
425
425
425
425
426
426
426

6/16/09 3:15:02 PM


■C O N T E N T S

Appendix E

19361fm.indd 23

TEMPLATE_STRING_IF_INVALID. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TEST_DATABASE_NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

TEST_RUNNER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TIME_FORMAT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TIME_ZONE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
URL_VALIDATOR_USER_AGENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
USE_ETAGS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
USE_I18N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
YEAR_MONTH_FORMAT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

426
426
426
427
427
427
427
428
428

Built-in Template Tags and Filters. . . . . . . . . . . . . . . . . . . . . . . .

429

Built-in Tag Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
autoescape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
block. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
comment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cycle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
debug. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
extends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

firstof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
for. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ifchanged. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ifequal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ifnotequal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
include. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
load. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
now. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
regroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
spaceless. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ssi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
templatetag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
url. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
widthratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
with. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Built-in Filter Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
add. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
addslashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
capfirst. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
center. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

429
429
429
429
430
431
431
431

431
432
433
434
435
435
435
436
436
438
440
440
440
441
441
442
442
442
442
442
442

xxiii

6/16/09 3:15:02 PM


×