aboutsummaryrefslogtreecommitdiffstats
path: root/www/py-django
diff options
context:
space:
mode:
authorlwhsu <lwhsu@FreeBSD.org>2010-08-25 04:57:01 +0800
committerlwhsu <lwhsu@FreeBSD.org>2010-08-25 04:57:01 +0800
commit601918b5f39904c31dc873a9757159de0d3dd3cc (patch)
treebffa82b103a2932c6b62938c4c96bdbdda80936e /www/py-django
parent75bdb0b81083800c3f142fce553f2844c0e3172b (diff)
downloadfreebsd-ports-gnome-601918b5f39904c31dc873a9757159de0d3dd3cc.tar.gz
freebsd-ports-gnome-601918b5f39904c31dc873a9757159de0d3dd3cc.tar.zst
freebsd-ports-gnome-601918b5f39904c31dc873a9757159de0d3dd3cc.zip
- Add a patch for being compatible with sphinx 1.x
Diffstat (limited to 'www/py-django')
-rw-r--r--www/py-django/Makefile14
-rw-r--r--www/py-django/files/extra-patch-sphinx1058
2 files changed, 1072 insertions, 0 deletions
diff --git a/www/py-django/Makefile b/www/py-django/Makefile
index a7a7593b2141..73e21dadd9b0 100644
--- a/www/py-django/Makefile
+++ b/www/py-django/Makefile
@@ -66,10 +66,24 @@ RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}flup>0:${PORTSDIR}/www/py-flup
.endif
.if defined(WITH_DOCS)
+EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-sphinx
BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}sphinx>0:${PORTSDIR}/textproc/py-sphinx
PORTDOCS= *
.endif
+pre-patch:
+.if defined(WITH_DOCS)
+ ${MKDIR} ${WRKSRC}/docs/_theme/djangodocs
+ ${MKDIR} ${WRKSRC}/docs/_theme/static
+.endif
+
+post-patch:
+.if defined(WITH_DOCS)
+. for f in docicons-behindscenes.png docicons-note.png docicons-philosophy.png
+ ${MV} ${WRKSRC}/docs/_static/${f} ${WRKSRC}/docs/_theme/djangodocs/static/
+. endfor
+.endif
+
post-build:
.if defined(WITH_DOCS)
. if defined(NOPORTDOCS)
diff --git a/www/py-django/files/extra-patch-sphinx b/www/py-django/files/extra-patch-sphinx
new file mode 100644
index 000000000000..1f1a1fc48e67
--- /dev/null
+++ b/www/py-django/files/extra-patch-sphinx
@@ -0,0 +1,1058 @@
+--- docs/conf.py 2010-05-18 02:51:50.000000000 +0800
++++ docs/conf.py 2010-08-25 02:57:47.931650357 +0800
+@@ -8,17 +8,21 @@
+ # The contents of this file are pickled, so don't put values in the namespace
+ # that aren't pickleable (module imports are okay, they're removed automatically).
+ #
+-# All configuration values have a default value; values that are commented out
+-# serve to show the default value.
++# All configuration values have a default; values that are commented out
++# serve to show the default.
+
+ import sys
+ import os
+
+-# If your extensions are in another directory, add it here.
+-sys.path.append(os.path.join(os.path.dirname(__file__), "_ext"))
++# If extensions (or modules to document with autodoc) are in another directory,
++# add these directories to sys.path here. If the directory is relative to the
++# documentation root, use os.path.abspath to make it absolute, like shown here.
++sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext")))
+
+-# General configuration
+-# ---------------------
++# -- General configuration -----------------------------------------------------
++
++# If your documentation needs a minimal Sphinx version, state it here.
++#needs_sphinx = '1.0'
+
+ # Add any Sphinx extension module names here, as strings. They can be extensions
+ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+@@ -30,6 +34,9 @@
+ # The suffix of source filenames.
+ source_suffix = '.txt'
+
++# The encoding of source files.
++#source_encoding = 'utf-8-sig'
++
+ # The master toctree document.
+ master_doc = 'contents'
+
+@@ -37,8 +44,10 @@
+ project = 'Django'
+ copyright = 'Django Software Foundation and contributors'
+
+-# The default replacements for |version| and |release|, also used in various
+-# other places throughout the built documents.
++
++# The version info for the project you're documenting, acts as replacement for
++# |version| and |release|, also used in various other places throughout the
++# built documents.
+ #
+ # The short X.Y version.
+ version = '1.2'
+@@ -47,14 +56,22 @@
+ # The next version to be released
+ django_next_version = '1.3'
+
++# The language for content autogenerated by Sphinx. Refer to documentation
++# for a list of supported languages.
++#language = None
++
+ # There are two options for replacing |today|: either, you set today to some
+ # non-false value, then it is used:
+ #today = ''
+ # Else, today_fmt is used as the format for a strftime call.
+ today_fmt = '%B %d, %Y'
+
+-# List of documents that shouldn't be included in the build.
+-#unused_docs = []
++# List of patterns, relative to source directory, that match files and
++# directories to ignore when looking for source files.
++exclude_patterns = ['_build']
++
++# The reST default role (used for this markup: `text`) to use for all documents.
++#default_role = None
+
+ # If true, '()' will be appended to :func: etc. cross-reference text.
+ add_function_parentheses = True
+@@ -75,13 +92,35 @@
+ # Note: exclude_dirnames is new in Sphinx 0.5
+ exclude_dirnames = ['.svn']
+
+-# Options for HTML output
+-# -----------------------
++# -- Options for HTML output ---------------------------------------------------
+
+-# The style sheet to use for HTML and HTML Help pages. A file of that name
+-# must exist either in Sphinx' static/ path, or in one of the custom paths
+-# given in html_static_path.
+-html_style = 'default.css'
++# The theme to use for HTML and HTML Help pages. See the documentation for
++# a list of builtin themes.
++html_theme = "djangodocs"
++
++# Theme options are theme-specific and customize the look and feel of a theme
++# further. For a list of options available for each theme, see the
++# documentation.
++#html_theme_options = {}
++
++# Add any paths that contain custom themes here, relative to this directory.
++html_theme_path = ["_theme"]
++
++# The name for this set of Sphinx documents. If None, it defaults to
++# "<project> v<release> documentation".
++#html_title = None
++
++# A shorter title for the navigation bar. Default is the same as html_title.
++#html_short_title = None
++
++# The name of an image file (relative to this directory) to place at the top
++# of the sidebar.
++#html_logo = None
++
++# The name of an image file (within the static path) to use as favicon of the
++# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
++# pixels large.
++#html_favicon = None
+
+ # Add any paths that contain custom static files (such as style sheets) here,
+ # relative to this directory. They are copied after the builtin static files,
+@@ -110,17 +149,38 @@
+ html_additional_pages = {}
+
+ # If false, no module index is generated.
+-#html_use_modindex = True
++#html_domain_indices = True
++
++# If false, no index is generated.
++#html_use_index = True
++
++# If true, the index is split into individual pages for each letter.
++#html_split_index = False
++
++# If true, links to the reST sources are added to the pages.
++#html_show_sourcelink = True
++
++# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
++#html_show_sphinx = True
+
+-# If true, the reST sources are included in the HTML build as _sources/<name>.
+-html_copy_source = True
++# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
++#html_show_copyright = True
++
++# If true, an OpenSearch description file will be output, and all pages will
++# contain a <link> tag referring to it. The value of this option must be the
++# base URL from which the finished HTML is served.
++#html_use_opensearch = ''
++
++# This is the file name suffix for HTML files (e.g. ".xhtml").
++#html_file_suffix = None
+
+ # Output file base name for HTML help builder.
+ htmlhelp_basename = 'Djangodoc'
+
++modindex_common_prefix = ["django."]
+
+-# Options for LaTeX output
+-# ------------------------
++
++# -- Options for LaTeX output --------------------------------------------------
+
+ # The paper size ('letter' or 'a4').
+ #latex_paper_size = 'letter'
+@@ -132,9 +192,24 @@
+ # (source start file, target name, title, author, document class [howto/manual]).
+ #latex_documents = []
+ latex_documents = [
+- ('contents', 'django.tex', 'Django Documentation', 'Django Software Foundation', 'manual'),
++ ('contents', 'django.tex', u'Django Documentation',
++ u'Django Software Foundation', 'manual'),
+ ]
+
++# The name of an image file (relative to this directory) to place at the top of
++# the title page.
++#latex_logo = None
++
++# For "manual" documents, if this is true, then toplevel headings are parts,
++# not chapters.
++#latex_use_parts = False
++
++# If true, show page references after internal links.
++#latex_show_pagerefs = False
++
++# If true, show URL addresses after external links.
++#latex_show_urls = False
++
+ # Additional stuff for the LaTeX preamble.
+ #latex_preamble = ''
+
+@@ -142,10 +217,53 @@
+ #latex_appendices = []
+
+ # If false, no module index is generated.
+-#latex_use_modindex = True
++#latex_domain_indices = True
+
+-# For "manual" documents, if this is true, then toplevel headings are parts,
+-# not chapters.
+-# If this isn't set to True, the LaTex writer can only handle six levels of headers.
+-latex_use_parts = True
+
++# -- Options for manual page output --------------------------------------------
++
++# One entry per manual page. List of tuples
++# (source start file, name, description, authors, manual section).
++man_pages = [
++ ('contents', 'django', 'Django Documentation', ['Django Software Foundation'], 1)
++]
++
++
++# -- Options for Epub output ---------------------------------------------------
++
++# Bibliographic Dublin Core info.
++epub_title = u'Django'
++epub_author = u'Django Software Foundation'
++epub_publisher = u'Django Software Foundation'
++epub_copyright = u'2010, Django Software Foundation'
++
++# The language of the text. It defaults to the language option
++# or en if the language is not set.
++#epub_language = ''
++
++# The scheme of the identifier. Typical schemes are ISBN or URL.
++#epub_scheme = ''
++
++# The unique identifier of the text. This can be a ISBN number
++# or the project homepage.
++#epub_identifier = ''
++
++# A unique identification for the text.
++#epub_uid = ''
++
++# HTML files that should be inserted before the pages created by sphinx.
++# The format is a list of tuples containing the path and title.
++#epub_pre_files = []
++
++# HTML files shat should be inserted after the pages created by sphinx.
++# The format is a list of tuples containing the path and title.
++#epub_post_files = []
++
++# A list of files that should not be packed into the epub file.
++#epub_exclude_files = []
++
++# The depth of the table of contents in toc.ncx.
++#epub_tocdepth = 3
++
++# Allow duplicate toc entries.
++#epub_tocdup = True
+--- docs/_ext/djangodocs.py 2010-05-08 22:31:20.000000000 +0800
++++ docs/_ext/djangodocs.py 2010-08-25 02:57:46.233613541 +0800
+@@ -88,7 +88,10 @@
+ if not is_nextversion:
+ if len(arguments) == 1:
+ linktext = 'Please, see the release notes <releases-%s>' % (arguments[0])
+- xrefs = sphinx.roles.xfileref_role('ref', linktext, linktext, lineno, state)
++ try:
++ xrefs = sphinx.roles.XRefRole()('ref', linktext, linktext, lineno, state) # Sphinx >= 1.0
++ except:
++ xrefs = sphinx.roles.xfileref_role('ref', linktext, linktext, lineno, state) # Sphinx < 1.0
+ node.extend(xrefs[0])
+ node['version'] = arguments[0]
+ else:
+@@ -159,7 +162,7 @@
+ # better callout -- the Sphinx default is just a little span,
+ # which is a bit less obvious that I'd like.
+ #
+- # FIXME: these messages are all hardcoded in English. We need to chanage
++ # FIXME: these messages are all hardcoded in English. We need to change
+ # that to accomodate other language docs, but I can't work out how to make
+ # that work and I think it'll require Sphinx 0.5 anyway.
+ #
+@@ -212,7 +215,10 @@
+ def parse_django_adminopt_node(env, sig, signode):
+ """A copy of sphinx.directives.CmdoptionDesc.parse_signature()"""
+ from sphinx import addnodes
+- from sphinx.directives.desc import option_desc_re
++ try:
++ from sphinx.domains.std import option_desc_re # Sphinx >= 1.0
++ except:
++ from sphinx.directives.desc import option_desc_re # Sphinx < 1.0
+ count = 0
+ firstname = ''
+ for m in option_desc_re.finditer(sig):
+@@ -278,9 +284,14 @@
+ self.warn("cannot create templatebuiltins.js due to missing simplejson dependency")
+ return
+ self.info(bold("writing templatebuiltins.js..."))
+- xrefs = self.env.reftargets.keys()
+- templatebuiltins = dict([('ttags', [n for (t,n) in xrefs if t == 'ttag']),
+- ('tfilters', [n for (t,n) in xrefs if t == 'tfilter'])])
++ try:
++ xrefs = self.env.reftargets.keys()
++ templatebuiltins = dict([('ttags', [n for (t,n) in xrefs if t == 'ttag']),
++ ('tfilters', [n for (t,n) in xrefs if t == 'tfilter'])])
++ except AttributeError:
++ xrefs = self.env.domaindata["std"]["objects"]
++ templatebuiltins = dict([('ttags', [n for (t,n) in xrefs if t == 'templatetag']),
++ ('tfilters', [n for (t,n) in xrefs if t == 'templatefilter'])])
+ outfilename = os.path.join(self.outdir, "templatebuiltins.js")
+ f = open(outfilename, 'wb')
+ f.write('var django_template_builtins = ')
+--- docs/Makefile 2010-05-08 22:31:20.000000000 +0800
++++ docs/Makefile 2010-08-25 02:57:47.932654550 +0800
+@@ -12,20 +12,26 @@
+ PAPEROPT_letter = -D latex_paper_size=letter
+ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+-.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest
++.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
+
+ help:
+ @echo "Please use \`make <target>' where <target> is one of"
+- @echo " html to make standalone HTML files"
+- @echo " dirhtml to make HTML files named index.html in directories"
+- @echo " pickle to make pickle files"
+- @echo " json to make JSON files"
+- @echo " htmlhelp to make HTML files and a HTML help project"
+- @echo " qthelp to make HTML files and a qthelp project"
+- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+- @echo " changes to make an overview of all changed/added/deprecated items"
+- @echo " linkcheck to check all external links for integrity"
+- @echo " doctest to run all doctests embedded in the documentation (if enabled)"
++ @echo " html to make standalone HTML files"
++ @echo " dirhtml to make HTML files named index.html in directories"
++ @echo " singlehtml to make a single large HTML file"
++ @echo " pickle to make pickle files"
++ @echo " json to make JSON files"
++ @echo " htmlhelp to make HTML files and a HTML help project"
++ @echo " qthelp to make HTML files and a qthelp project"
++ @echo " devhelp to make HTML files and a Devhelp project"
++ @echo " epub to make an epub"
++ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
++ @echo " latexpdf to make LaTeX files and run them through pdflatex"
++ @echo " text to make text files"
++ @echo " man to make manual pages"
++ @echo " changes to make an overview of all changed/added/deprecated items"
++ @echo " linkcheck to check all external links for integrity"
++ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+ clean:
+ -rm -rf $(BUILDDIR)/*
+@@ -40,6 +46,11 @@
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
++singlehtml:
++ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
++ @echo
++ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
++
+ pickle:
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+ @echo
+@@ -65,12 +76,42 @@
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/django.qhc"
+
++devhelp:
++ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
++ @echo
++ @echo "Build finished."
++ @echo "To view the help file:"
++ @echo "# mkdir -p $$HOME/.local/share/devhelp/django"
++ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/django"
++ @echo "# devhelp"
++
++epub:
++ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
++ @echo
++ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
++
+ latex:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+- @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+- "run these through (pdf)latex."
++ @echo "Run \`make' in that directory to run these through (pdf)latex" \
++ "(use \`make latexpdf' here to do that automatically)."
++
++latexpdf:
++ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
++ @echo "Running LaTeX files through pdflatex..."
++ make -C $(BUILDDIR)/latex all-pdf
++ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
++
++text:
++ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
++ @echo
++ @echo "Build finished. The text files are in $(BUILDDIR)/text."
++
++man:
++ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
++ @echo
++ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+ changes:
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+--- docs/_templates/genindex.html 2008-08-24 06:25:40.000000000 +0800
++++ docs/_templates/genindex.html 1970-01-01 08:00:00.000000000 +0800
+@@ -1,4 +0,0 @@
+-{% extends "!genindex.html" %}
+-
+-{% block bodyclass %}{% endblock %}
+-{% block sidebarwrapper %}{% endblock %}
+--- docs/_templates/modindex.html 2008-08-24 06:25:40.000000000 +0800
++++ docs/_templates/modindex.html 1970-01-01 08:00:00.000000000 +0800
+@@ -1,3 +0,0 @@
+-{% extends "!modindex.html" %}
+-{% block bodyclass %}{% endblock %}
+-{% block sidebarwrapper %}{% endblock %}
+--- docs/_templates/search.html 2008-08-24 06:25:40.000000000 +0800
++++ docs/_templates/search.html 1970-01-01 08:00:00.000000000 +0800
+@@ -1,3 +0,0 @@
+-{% extends "!search.html" %}
+-{% block bodyclass %}{% endblock %}
+-{% block sidebarwrapper %}{% endblock %}
+--- docs/_theme/djangodocs/genindex.html 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/genindex.html 2010-08-25 02:57:46.356120964 +0800
+@@ -0,0 +1,4 @@
++{% extends "basic/genindex.html" %}
++
++{% block bodyclass %}{% endblock %}
++{% block sidebarwrapper %}{% endblock %}
+--- docs/_theme/djangodocs/layout.html 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/layout.html 2010-08-25 02:57:46.355117049 +0800
+@@ -0,0 +1,124 @@
++{% extends "basic/layout.html" %}
++
++{%- macro secondnav() %}
++ {%- if prev %}
++ &laquo; <a href="{{ prev.link|e }}" title="{{ prev.title|e }}">previous</a>
++ {{ reldelim2 }}
++ {%- endif %}
++ {%- if parents %}
++ <a href="{{ parents.0.link|e }}" title="{{ parents.0.title|e }}" accesskey="U">up</a>
++ {%- else %}
++ <a title="{{ docstitle }}" href="{{ pathto('index') }}" accesskey="U">up</a>
++ {%- endif %}
++ {%- if next %}
++ {{ reldelim2 }}
++ <a href="{{ next.link|e }}" title="{{ next.title|e }}">next</a> &raquo;
++ {%- endif %}
++{%- endmacro %}
++
++{% block extrahead %}
++{{ super() }}
++<script type="text/javascript" src="{{ pathto('templatebuiltins.js', 1) }}"></script>
++<script type="text/javascript">
++(function($) {
++ if (!django_template_builtins) {
++ // templatebuiltins.js missing, do nothing.
++ return;
++ }
++ $(document).ready(function() {
++ // Hyperlink Django template tags and filters
++ var base = "{{ pathto('ref/templates/builtins') }}";
++ if (base == "#") {
++ // Special case for builtins.html itself
++ base = "";
++ }
++ // Tags are keywords, class '.k'
++ $("div.highlight\\-html\\+django span.k").each(function(i, elem) {
++ var tagname = $(elem).text();
++ if ($.inArray(tagname, django_template_builtins.ttags) != -1) {
++ var fragment = tagname.replace(/_/, '-');
++ $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>");
++ }
++ });
++ // Filters are functions, class '.nf'
++ $("div.highlight\\-html\\+django span.nf").each(function(i, elem) {
++ var filtername = $(elem).text();
++ if ($.inArray(filtername, django_template_builtins.tfilters) != -1) {
++ var fragment = filtername.replace(/_/, '-');
++ $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>");
++ }
++ });
++ });
++})(jQuery);
++</script>
++{% endblock %}
++
++{% block document %}
++ <div id="custom-doc" class="{% block bodyclass %}{{ 'yui-t6' if pagename != 'index' else '' }}{% endblock %}">
++ <div id="hd">
++ <h1><a href="{{ pathto('index') }}">{{ docstitle }}</a></h1>
++ <div id="global-nav">
++ <a title="Home page" href="{{ pathto('index') }}">Home</a> {{ reldelim2 }}
++ <a title="Table of contents" href="{{ pathto('contents') }}">Table of contents</a> {{ reldelim2 }}
++ <a title="Global index" href="{{ pathto('genindex') }}">Index</a> {{ reldelim2 }}
++ <a title="Module index" href="{{ pathto('py-modindex') }}">Modules</a>
++ </div>
++ <div class="nav">{{ secondnav() }}</div>
++ </div>
++
++ <div id="bd">
++ <div id="yui-main">
++ <div class="yui-b">
++ <div class="yui-g" id="{{ pagename|replace('/', '-') }}">
++ {% block body %}{% endblock %}
++ </div>
++ </div>
++ </div>
++ {% block sidebarwrapper %}
++ {% if pagename != 'index' %}
++ <div class="yui-b" id="sidebar">
++ {{ sidebar() }}
++ {%- if last_updated %}
++ <h3>Last update:</h3>
++ <p class="topless">{{ last_updated }}</p>
++ {%- endif %}
++ </div>
++ {% endif %}
++ {% endblock %}
++ </div>
++
++ <div id="ft">
++ <div class="nav">{{ secondnav() }}</div>
++ </div>
++ </div>
++{% endblock %}
++
++{% block sidebarrel %}
++ <h3>Browse</h3>
++ <ul>
++ {% if prev %}
++ <li>Prev: <a href="{{ prev.link }}">{{ prev.title }}</a></li>
++ {% endif %}
++ {% if next %}
++ <li>Next: <a href="{{ next.link }}">{{ next.title }}</a></li>
++ {% endif %}
++ </ul>
++ <h3>You are here:</h3>
++ <ul>
++ <li>
++ <a href="{{ pathto('index') }}">{{ docstitle }}</a>
++ {% for p in parents %}
++ <ul><li><a href="{{ p.link }}">{{ p.title }}</a>
++ {% endfor %}
++ <ul><li>{{ title }}</li></ul>
++ {% for p in parents %}</li></ul>{% endfor %}
++ </li>
++ </ul>
++{% endblock %}
++
++{# Empty some default blocks out #}
++{% block relbar1 %}{% endblock %}
++{% block relbar2 %}{% endblock %}
++{% block sidebar1 %}{% endblock %}
++{% block sidebar2 %}{% endblock %}
++{% block footer %}{% endblock %}
+--- docs/_theme/djangodocs/modindex.html 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/modindex.html 2010-08-25 02:57:46.358129351 +0800
+@@ -0,0 +1,3 @@
++{% extends "basic/modindex.html" %}
++{% block bodyclass %}{% endblock %}
++{% block sidebarwrapper %}{% endblock %}
+--- docs/_theme/djangodocs/search.html 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/search.html 2010-08-25 02:57:46.357125157 +0800
+@@ -0,0 +1,3 @@
++{% extends "basic/search.html" %}
++{% block bodyclass %}{% endblock %}
++{% block sidebarwrapper %}{% endblock %}
+--- docs/_theme/djangodocs/static/default.css 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/static/default.css 2010-08-25 02:57:46.347083501 +0800
+@@ -0,0 +1,3 @@
++@import url(reset-fonts-grids.css);
++@import url(djangodocs.css);
++@import url(homepage.css);
+--- docs/_theme/djangodocs/static/djangodocs.css 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/static/djangodocs.css 2010-08-25 02:57:46.345075673 +0800
+@@ -0,0 +1,135 @@
++/*** setup ***/
++html { background:#092e20;}
++body { font:12px/1.5 Verdana,sans-serif; background:#092e20; color: white;}
++#custom-doc { width:76.54em;*width:74.69em;min-width:995px; max-width:100em; margin:auto; text-align:left; padding-top:16px; margin-top:0;}
++#hd { padding: 4px 0 12px 0; }
++#bd { background:#234F32; }
++#ft { color:#487858; font-size:90%; padding-bottom: 2em; }
++
++/*** links ***/
++a {text-decoration: none;}
++a img {border: none;}
++a:link, a:visited { color:#ffc757; }
++#bd a:link, #bd a:visited { color:#ab5603; text-decoration:underline; }
++#bd #sidebar a:link, #bd #sidebar a:visited { color:#ffc757; text-decoration:none; }
++a:hover { color:#ffe761; }
++#bd a:hover { background-color:#E0FFB8; color:#234f32; text-decoration:none; }
++#bd #sidebar a:hover { color:#ffe761; background:none; }
++h2 a, h3 a, h4 a { text-decoration:none !important; }
++a.reference em { font-style: normal; }
++
++/*** sidebar ***/
++#sidebar div.sphinxsidebarwrapper { font-size:92%; margin-right: 14px; }
++#sidebar h3, #sidebar h4 { color: white; font-size: 125%; }
++#sidebar a { color: white; }
++#sidebar ul ul { margin-top:0; margin-bottom:0; }
++#sidebar li { margin-top: 0.2em; margin-bottom: 0.2em; }
++
++/*** nav ***/
++div.nav { margin: 0; font-size: 11px; text-align: right; color: #487858;}
++#hd div.nav { margin-top: -27px; }
++#ft div.nav { margin-bottom: -18px; }
++#hd h1 a { color: white; }
++#global-nav { position:absolute; top:5px; margin-left: -5px; padding:7px 0; color:#263E2B; }
++#global-nav a:link, #global-nav a:visited {color:#487858;}
++#global-nav a {padding:0 4px;}
++#global-nav a.about {padding-left:0;}
++#global-nav:hover {color:#fff;}
++#global-nav:hover a:link, #global-nav:hover a:visited { color:#ffc757; }
++
++/*** content ***/
++#yui-main div.yui-b { position: relative; }
++#yui-main div.yui-b { margin: 0 0 0 20px; background: white; color: black; padding: 0.3em 2em 1em 2em; }
++
++/*** basic styles ***/
++dd { margin-left:15px; }
++h1,h2,h3,h4 { margin-top:1em; font-family:"Trebuchet MS",sans-serif; font-weight:normal; }
++h1 { font-size:218%; margin-top:0.6em; margin-bottom:.4em; line-height:1.1em; }
++h2 { font-size:175%; margin-bottom:.6em; line-height:1.2em; color:#092e20; }
++h3 { font-size:150%; font-weight:bold; margin-bottom:.2em; color:#487858; }
++h4 { font-size:125%; font-weight:bold; margin-top:1.5em; margin-bottom:3px; }
++div.figure { text-align: center; }
++div.figure p.caption { font-size:1em; margin-top:0; margin-bottom:1.5em; color: #555;}
++hr { color:#ccc; background-color:#ccc; height:1px; border:0; }
++p, ul, dl { margin-top:.6em; margin-bottom:1em; padding-bottom: 0.1em;}
++#yui-main div.yui-b img { max-width: 50em; margin-left: auto; margin-right: auto; display: block; }
++caption { font-size:1em; font-weight:bold; margin-top:0.5em; margin-bottom:0.5em; margin-left: 2px; text-align: center; }
++blockquote { padding: 0 1em; margin: 1em 0; font:125%/1.2em "Trebuchet MS", sans-serif; color:#234f32; border-left:2px solid #94da3a; }
++strong { font-weight: bold; }
++em { font-style: italic; }
++ins { font-weight: bold; text-decoration: none; }
++
++/*** lists ***/
++ul { padding-left:30px; }
++ol { padding-left:30px; }
++ol.arabic li { list-style-type: decimal; }
++ul li { list-style-type:square; margin-bottom:.4em; }
++ol li { margin-bottom: .4em; }
++ul ul { padding-left:1.2em; }
++ul ul ul { padding-left:1em; }
++ul.linklist, ul.toc { padding-left:0; }
++ul.toc ul { margin-left:.6em; }
++ul.toc ul li { list-style-type:square; }
++ul.toc ul ul li { list-style-type:disc; }
++ul.linklist li, ul.toc li { list-style-type:none; }
++dt { font-weight:bold; margin-top:.5em; font-size:1.1em; }
++dd { margin-bottom:.8em; }
++ol.toc { margin-bottom: 2em; }
++ol.toc li { font-size:125%; padding: .5em; line-height:1.2em; clear: right; }
++ol.toc li.b { background-color: #E0FFB8; }
++ol.toc li a:hover { background-color: transparent !important; text-decoration: underline !important; }
++ol.toc span.release-date { color:#487858; float: right; font-size: 85%; padding-right: .5em; }
++ol.toc span.comment-count { font-size: 75%; color: #999; }
++
++/*** tables ***/
++table { color:#000; margin-bottom: 1em; width: 100%; }
++table.docutils td p { margin-top:0; margin-bottom:.5em; }
++table.docutils td, table.docutils th { border-bottom:1px solid #dfdfdf; padding:4px 2px;}
++table.docutils thead th { border-bottom:2px solid #dfdfdf; text-align:left; font-weight: bold; white-space: nowrap; }
++table.docutils thead th p { margin: 0; padding: 0; }
++table.docutils { border-collapse:collapse; }
++
++/*** code blocks ***/
++.literal { white-space:nowrap; }
++.literal { color:#234f32; }
++#sidebar .literal { color:white; background:transparent; font-size:11px; }
++h4 .literal { color: #234f32; font-size: 13px; }
++pre { font-size:small; background:#E0FFB8; border:1px solid #94da3a; border-width:1px 0; margin: 1em 0; padding: .3em .4em; overflow: hidden; line-height: 1.3em;}
++dt .literal, table .literal { background:none; }
++#bd a.reference { text-decoration: none; }
++#bd a.reference tt.literal { border-bottom: 1px #234f32 dotted; }
++
++/* Restore colors of pygments hyperlinked code */
++#bd .highlight .k a:link, #bd .highlight .k a:visited { color: #000000; text-decoration: none; border-bottom: 1px dotted #000000; }
++#bd .highlight .nf a:link, #bd .highlight .nf a:visited { color: #990000; text-decoration: none; border-bottom: 1px dotted #990000; }
++
++
++/*** notes & admonitions ***/
++.note, .admonition { padding:.8em 1em .8em; margin: 1em 0; border:1px solid #94da3a; }
++.admonition-title { font-weight:bold; margin-top:0 !important; margin-bottom:0 !important;}
++.admonition .last { margin-bottom:0 !important; }
++.note, .admonition { padding-left:65px; background:url(docicons-note.png) .8em .8em no-repeat;}
++div.admonition-philosophy { padding-left:65px; background:url(docicons-philosophy.png) .8em .8em no-repeat;}
++div.admonition-behind-the-scenes { padding-left:65px; background:url(docicons-behindscenes.png) .8em .8em no-repeat;}
++
++/*** versoinadded/changes ***/
++div.versionadded, div.versionchanged { }
++div.versionadded span.title, div.versionchanged span.title { font-weight: bold; }
++
++/*** p-links ***/
++a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; visibility: hidden; }
++h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; }
++
++/*** index ***/
++table.indextable td { text-align: left; vertical-align: top;}
++table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; }
++table.indextable tr.pcap { height: 10px; }
++table.indextable tr.cap { margin-top: 10px; background-color: #f2f2f2;}
++
++/*** page-specific overrides ***/
++div#contents ul { margin-bottom: 0;}
++div#contents ul li { margin-bottom: 0;}
++div#contents ul ul li { margin-top: 0.3em;}
++
++/*** IE hacks ***/
++* pre { width: 100%; }
+--- docs/_theme/djangodocs/static/homepage.css 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/static/homepage.css 2010-08-25 02:57:46.349091888 +0800
+@@ -0,0 +1,22 @@
++#index p.rubric { font-size:150%; font-weight:normal; margin-bottom:.2em; color:#487858; }
++
++#index div.section dt { font-weight: normal; }
++
++#index #s-getting-help { float: right; width: 35em; background: #E1ECE2; padding: 1em; margin: 2em 0 2em 2em; }
++#index #s-getting-help h2 { margin: 0; }
++
++#index #s-django-documentation div.section div.section h3 { margin: 0; }
++#index #s-django-documentation div.section div.section { background: #E1ECE2; padding: 1em; margin: 2em 0 2em 40.3em; }
++#index #s-django-documentation div.section div.section a.reference { white-space: nowrap; }
++
++#index #s-using-django dl,
++#index #s-add-on-contrib-applications dl,
++#index #s-solving-specific-problems dl,
++#index #s-reference dl
++ { float: left; width: 41em; }
++
++#index #s-add-on-contrib-applications,
++#index #s-solving-specific-problems,
++#index #s-reference,
++#index #s-and-all-the-rest
++ { clear: left; }
+--- docs/_theme/djangodocs/static/reset-fonts-grids.css 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/static/reset-fonts-grids.css 2010-08-25 02:57:46.346079308 +0800
+@@ -0,0 +1,8 @@
++/*
++Copyright (c) 2008, Yahoo! Inc. All rights reserved.
++Code licensed under the BSD License:
++http://developer.yahoo.net/yui/license.txt
++version: 2.5.1
++*/
++html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;font-variant:normal;}sup {vertical-align:text-top;}sub {vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}body {font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
++body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}s .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
+--- docs/_theme/djangodocs/theme.conf 1970-01-01 08:00:00.000000000 +0800
++++ docs/_theme/djangodocs/theme.conf 2010-08-25 02:57:46.356120964 +0800
+@@ -0,0 +1,4 @@
++[theme]
++inherit = basic
++stylesheet = default.css
++pygments_style = trac
+--- docs/_templates/layout.html 2010-05-08 22:31:20.000000000 +0800
++++ docs/_templates/layout.html 1970-01-01 08:00:00.000000000 +0800
+@@ -1,124 +0,0 @@
+-{% extends "!layout.html" %}
+-
+-{%- macro secondnav() %}
+- {%- if prev %}
+- &laquo; <a href="{{ prev.link|e }}" title="{{ prev.title|e }}">previous</a>
+- {{ reldelim2 }}
+- {%- endif %}
+- {%- if parents %}
+- <a href="{{ parents.0.link|e }}" title="{{ parents.0.title|e }}" accesskey="U">up</a>
+- {%- else %}
+- <a title="{{ docstitle }}" href="{{ pathto('index') }}" accesskey="U">up</a>
+- {%- endif %}
+- {%- if next %}
+- {{ reldelim2 }}
+- <a href="{{ next.link|e }}" title="{{ next.title|e }}">next</a> &raquo;
+- {%- endif %}
+-{%- endmacro %}
+-
+-{% block extrahead %}
+-{{ super() }}
+-<script type="text/javascript" src="{{ pathto('templatebuiltins.js', 1) }}"></script>
+-<script type="text/javascript">
+-(function($) {
+- if (!django_template_builtins) {
+- // templatebuiltins.js missing, do nothing.
+- return;
+- }
+- $(document).ready(function() {
+- // Hyperlink Django template tags and filters
+- var base = "{{ pathto('ref/templates/builtins') }}";
+- if (base == "#") {
+- // Special case for builtins.html itself
+- base = "";
+- }
+- // Tags are keywords, class '.k'
+- $("div.highlight\\-html\\+django span.k").each(function(i, elem) {
+- var tagname = $(elem).text();
+- if ($.inArray(tagname, django_template_builtins.ttags) != -1) {
+- var fragment = tagname.replace(/_/, '-');
+- $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>");
+- }
+- });
+- // Filters are functions, class '.nf'
+- $("div.highlight\\-html\\+django span.nf").each(function(i, elem) {
+- var filtername = $(elem).text();
+- if ($.inArray(filtername, django_template_builtins.tfilters) != -1) {
+- var fragment = filtername.replace(/_/, '-');
+- $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>");
+- }
+- });
+- });
+-})(jQuery);
+-</script>
+-{% endblock %}
+-
+-{% block document %}
+- <div id="custom-doc" class="{% block bodyclass %}{{ 'yui-t6' if pagename != 'index' else '' }}{% endblock %}">
+- <div id="hd">
+- <h1><a href="{{ pathto('index') }}">{{ docstitle }}</a></h1>
+- <div id="global-nav">
+- <a title="Home page" href="{{ pathto('index') }}">Home</a> {{ reldelim2 }}
+- <a title="Table of contents" href="{{ pathto('contents') }}">Table of contents</a> {{ reldelim2 }}
+- <a title="Global index" href="{{ pathto('genindex') }}">Index</a> {{ reldelim2 }}
+- <a title="Module index" href="{{ pathto('modindex') }}">Modules</a>
+- </div>
+- <div class="nav">{{ secondnav() }}</div>
+- </div>
+-
+- <div id="bd">
+- <div id="yui-main">
+- <div class="yui-b">
+- <div class="yui-g" id="{{ pagename|replace('/', '-') }}">
+- {% block body %}{% endblock %}
+- </div>
+- </div>
+- </div>
+- {% block sidebarwrapper %}
+- {% if pagename != 'index' %}
+- <div class="yui-b" id="sidebar">
+- {{ sidebar() }}
+- {%- if last_updated %}
+- <h3>Last update:</h3>
+- <p class="topless">{{ last_updated }}</p>
+- {%- endif %}
+- </div>
+- {% endif %}
+- {% endblock %}
+- </div>
+-
+- <div id="ft">
+- <div class="nav">{{ secondnav() }}</div>
+- </div>
+- </div>
+-{% endblock %}
+-
+-{% block sidebarrel %}
+- <h3>Browse</h3>
+- <ul>
+- {% if prev %}
+- <li>Prev: <a href="{{ prev.link }}">{{ prev.title }}</a></li>
+- {% endif %}
+- {% if next %}
+- <li>Next: <a href="{{ next.link }}">{{ next.title }}</a></li>
+- {% endif %}
+- </ul>
+- <h3>You are here:</h3>
+- <ul>
+- <li>
+- <a href="{{ pathto('index') }}">{{ docstitle }}</a>
+- {% for p in parents %}
+- <ul><li><a href="{{ p.link }}">{{ p.title }}</a>
+- {% endfor %}
+- <ul><li>{{ title }}</li></ul>
+- {% for p in parents %}</li></ul>{% endfor %}
+- </li>
+- </ul>
+-{% endblock %}
+-
+-{# Empty some default blocks out #}
+-{% block relbar1 %}{% endblock %}
+-{% block relbar2 %}{% endblock %}
+-{% block sidebar1 %}{% endblock %}
+-{% block sidebar2 %}{% endblock %}
+-{% block footer %}{% endblock %}
+--- docs/_static/default.css 2008-08-24 06:25:40.000000000 +0800
++++ docs/_static/default.css 1970-01-01 08:00:00.000000000 +0800
+@@ -1,3 +0,0 @@
+-@import url(reset-fonts-grids.css);
+-@import url(djangodocs.css);
+-@import url(homepage.css);
+--- docs/_static/djangodocs.css 2010-05-08 22:31:20.000000000 +0800
++++ docs/_static/djangodocs.css 1970-01-01 08:00:00.000000000 +0800
+@@ -1,135 +0,0 @@
+-/*** setup ***/
+-html { background:#092e20;}
+-body { font:12px/1.5 Verdana,sans-serif; background:#092e20; color: white;}
+-#custom-doc { width:76.54em;*width:74.69em;min-width:995px; max-width:100em; margin:auto; text-align:left; padding-top:16px; margin-top:0;}
+-#hd { padding: 4px 0 12px 0; }
+-#bd { background:#234F32; }
+-#ft { color:#487858; font-size:90%; padding-bottom: 2em; }
+-
+-/*** links ***/
+-a {text-decoration: none;}
+-a img {border: none;}
+-a:link, a:visited { color:#ffc757; }
+-#bd a:link, #bd a:visited { color:#ab5603; text-decoration:underline; }
+-#bd #sidebar a:link, #bd #sidebar a:visited { color:#ffc757; text-decoration:none; }
+-a:hover { color:#ffe761; }
+-#bd a:hover { background-color:#E0FFB8; color:#234f32; text-decoration:none; }
+-#bd #sidebar a:hover { color:#ffe761; background:none; }
+-h2 a, h3 a, h4 a { text-decoration:none !important; }
+-a.reference em { font-style: normal; }
+-
+-/*** sidebar ***/
+-#sidebar div.sphinxsidebarwrapper { font-size:92%; margin-right: 14px; }
+-#sidebar h3, #sidebar h4 { color: white; font-size: 125%; }
+-#sidebar a { color: white; }
+-#sidebar ul ul { margin-top:0; margin-bottom:0; }
+-#sidebar li { margin-top: 0.2em; margin-bottom: 0.2em; }
+-
+-/*** nav ***/
+-div.nav { margin: 0; font-size: 11px; text-align: right; color: #487858;}
+-#hd div.nav { margin-top: -27px; }
+-#ft div.nav { margin-bottom: -18px; }
+-#hd h1 a { color: white; }
+-#global-nav { position:absolute; top:5px; margin-left: -5px; padding:7px 0; color:#263E2B; }
+-#global-nav a:link, #global-nav a:visited {color:#487858;}
+-#global-nav a {padding:0 4px;}
+-#global-nav a.about {padding-left:0;}
+-#global-nav:hover {color:#fff;}
+-#global-nav:hover a:link, #global-nav:hover a:visited { color:#ffc757; }
+-
+-/*** content ***/
+-#yui-main div.yui-b { position: relative; }
+-#yui-main div.yui-b { margin: 0 0 0 20px; background: white; color: black; padding: 0.3em 2em 1em 2em; }
+-
+-/*** basic styles ***/
+-dd { margin-left:15px; }
+-h1,h2,h3,h4 { margin-top:1em; font-family:"Trebuchet MS",sans-serif; font-weight:normal; }
+-h1 { font-size:218%; margin-top:0.6em; margin-bottom:.4em; line-height:1.1em; }
+-h2 { font-size:175%; margin-bottom:.6em; line-height:1.2em; color:#092e20; }
+-h3 { font-size:150%; font-weight:bold; margin-bottom:.2em; color:#487858; }
+-h4 { font-size:125%; font-weight:bold; margin-top:1.5em; margin-bottom:3px; }
+-div.figure { text-align: center; }
+-div.figure p.caption { font-size:1em; margin-top:0; margin-bottom:1.5em; color: #555;}
+-hr { color:#ccc; background-color:#ccc; height:1px; border:0; }
+-p, ul, dl { margin-top:.6em; margin-bottom:1em; padding-bottom: 0.1em;}
+-#yui-main div.yui-b img { max-width: 50em; margin-left: auto; margin-right: auto; display: block; }
+-caption { font-size:1em; font-weight:bold; margin-top:0.5em; margin-bottom:0.5em; margin-left: 2px; text-align: center; }
+-blockquote { padding: 0 1em; margin: 1em 0; font:125%/1.2em "Trebuchet MS", sans-serif; color:#234f32; border-left:2px solid #94da3a; }
+-strong { font-weight: bold; }
+-em { font-style: italic; }
+-ins { font-weight: bold; text-decoration: none; }
+-
+-/*** lists ***/
+-ul { padding-left:30px; }
+-ol { padding-left:30px; }
+-ol.arabic li { list-style-type: decimal; }
+-ul li { list-style-type:square; margin-bottom:.4em; }
+-ol li { margin-bottom: .4em; }
+-ul ul { padding-left:1.2em; }
+-ul ul ul { padding-left:1em; }
+-ul.linklist, ul.toc { padding-left:0; }
+-ul.toc ul { margin-left:.6em; }
+-ul.toc ul li { list-style-type:square; }
+-ul.toc ul ul li { list-style-type:disc; }
+-ul.linklist li, ul.toc li { list-style-type:none; }
+-dt { font-weight:bold; margin-top:.5em; font-size:1.1em; }
+-dd { margin-bottom:.8em; }
+-ol.toc { margin-bottom: 2em; }
+-ol.toc li { font-size:125%; padding: .5em; line-height:1.2em; clear: right; }
+-ol.toc li.b { background-color: #E0FFB8; }
+-ol.toc li a:hover { background-color: transparent !important; text-decoration: underline !important; }
+-ol.toc span.release-date { color:#487858; float: right; font-size: 85%; padding-right: .5em; }
+-ol.toc span.comment-count { font-size: 75%; color: #999; }
+-
+-/*** tables ***/
+-table { color:#000; margin-bottom: 1em; width: 100%; }
+-table.docutils td p { margin-top:0; margin-bottom:.5em; }
+-table.docutils td, table.docutils th { border-bottom:1px solid #dfdfdf; padding:4px 2px;}
+-table.docutils thead th { border-bottom:2px solid #dfdfdf; text-align:left; font-weight: bold; white-space: nowrap; }
+-table.docutils thead th p { margin: 0; padding: 0; }
+-table.docutils { border-collapse:collapse; }
+-
+-/*** code blocks ***/
+-.literal { white-space:nowrap; }
+-.literal { color:#234f32; }
+-#sidebar .literal { color:white; background:transparent; font-size:11px; }
+-h4 .literal { color: #234f32; font-size: 13px; }
+-pre { font-size:small; background:#E0FFB8; border:1px solid #94da3a; border-width:1px 0; margin: 1em 0; padding: .3em .4em; overflow: hidden; line-height: 1.3em;}
+-dt .literal, table .literal { background:none; }
+-#bd a.reference { text-decoration: none; }
+-#bd a.reference tt.literal { border-bottom: 1px #234f32 dotted; }
+-
+-/* Restore colors of pygments hyperlinked code */
+-#bd .highlight .k a:link, #bd .highlight .k a:visited { color: #000000; text-decoration: none; border-bottom: 1px dotted #000000; }
+-#bd .highlight .nf a:link, #bd .highlight .nf a:visited { color: #990000; text-decoration: none; border-bottom: 1px dotted #990000; }
+-
+-
+-/*** notes & admonitions ***/
+-.note, .admonition { padding:.8em 1em .8em; margin: 1em 0; border:1px solid #94da3a; }
+-.admonition-title { font-weight:bold; margin-top:0 !important; margin-bottom:0 !important;}
+-.admonition .last { margin-bottom:0 !important; }
+-.note, .admonition { padding-left:65px; background:url(docicons-note.png) .8em .8em no-repeat;}
+-div.admonition-philosophy { padding-left:65px; background:url(docicons-philosophy.png) .8em .8em no-repeat;}
+-div.admonition-behind-the-scenes { padding-left:65px; background:url(docicons-behindscenes.png) .8em .8em no-repeat;}
+-
+-/*** versoinadded/changes ***/
+-div.versionadded, div.versionchanged { }
+-div.versionadded span.title, div.versionchanged span.title { font-weight: bold; }
+-
+-/*** p-links ***/
+-a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; visibility: hidden; }
+-h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; }
+-
+-/*** index ***/
+-table.indextable td { text-align: left; vertical-align: top;}
+-table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; }
+-table.indextable tr.pcap { height: 10px; }
+-table.indextable tr.cap { margin-top: 10px; background-color: #f2f2f2;}
+-
+-/*** page-specific overrides ***/
+-div#contents ul { margin-bottom: 0;}
+-div#contents ul li { margin-bottom: 0;}
+-div#contents ul ul li { margin-top: 0.3em;}
+-
+-/*** IE hacks ***/
+-* pre { width: 100%; }
+--- docs/_static/homepage.css 2008-08-24 06:25:40.000000000 +0800
++++ docs/_static/homepage.css 1970-01-01 08:00:00.000000000 +0800
+@@ -1,22 +0,0 @@
+-#index p.rubric { font-size:150%; font-weight:normal; margin-bottom:.2em; color:#487858; }
+-
+-#index div.section dt { font-weight: normal; }
+-
+-#index #s-getting-help { float: right; width: 35em; background: #E1ECE2; padding: 1em; margin: 2em 0 2em 2em; }
+-#index #s-getting-help h2 { margin: 0; }
+-
+-#index #s-django-documentation div.section div.section h3 { margin: 0; }
+-#index #s-django-documentation div.section div.section { background: #E1ECE2; padding: 1em; margin: 2em 0 2em 40.3em; }
+-#index #s-django-documentation div.section div.section a.reference { white-space: nowrap; }
+-
+-#index #s-using-django dl,
+-#index #s-add-on-contrib-applications dl,
+-#index #s-solving-specific-problems dl,
+-#index #s-reference dl
+- { float: left; width: 41em; }
+-
+-#index #s-add-on-contrib-applications,
+-#index #s-solving-specific-problems,
+-#index #s-reference,
+-#index #s-and-all-the-rest
+- { clear: left; }
+--- docs/_static/reset-fonts-grids.css 2008-08-24 06:25:40.000000000 +0800
++++ docs/_static/reset-fonts-grids.css 1970-01-01 08:00:00.000000000 +0800
+@@ -1,8 +0,0 @@
+-/*
+-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+-Code licensed under the BSD License:
+-http://developer.yahoo.net/yui/license.txt
+-version: 2.5.1
+-*/
+-html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;font-variant:normal;}sup {vertical-align:text-top;}sub {vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}body {font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
+-body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}s .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}