<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Migrating function-based generic views — Django 1.4.13 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '1.4.13', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="top" title="Django 1.4.13 documentation" href="../index.html" /> <link rel="up" title="Using Django" href="index.html" /> <link rel="next" title="Managing files" href="files.html" /> <link rel="prev" title="Class-based generic views" href="class-based-views.html" /> <script type="text/javascript" src="../templatebuiltins.js"></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 = "../ref/templates/builtins.html"; 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> </head> <body> <div class="document"> <div id="custom-doc" class="yui-t6"> <div id="hd"> <h1><a href="../index.html">Django 1.4.13 documentation</a></h1> <div id="global-nav"> <a title="Home page" href="../index.html">Home</a> | <a title="Table of contents" href="../contents.html">Table of contents</a> | <a title="Global index" href="../genindex.html">Index</a> | <a title="Module index" href="../py-modindex.html">Modules</a> </div> <div class="nav"> « <a href="class-based-views.html" title="Class-based generic views">previous</a> | <a href="index.html" title="Using Django" accesskey="U">up</a> | <a href="files.html" title="Managing files">next</a> »</div> </div> <div id="bd"> <div id="yui-main"> <div class="yui-b"> <div class="yui-g" id="topics-generic-views-migration"> <div class="section" id="s-migrating-function-based-generic-views"> <span id="migrating-function-based-generic-views"></span><h1>Migrating function-based generic views<a class="headerlink" href="#migrating-function-based-generic-views" title="Permalink to this headline">¶</a></h1> <p>All the <a class="reference internal" href="../ref/generic-views.html"><em>function-based generic views</em></a> that existed in Django 1.2 have analogs as <a class="reference internal" href="../ref/class-based-views.html"><em>class-based generic views</em></a> in Django 1.3. The feature set exposed in those function-based views can be replicated in a class-based way.</p> <div class="section" id="s-how-to-migrate"> <span id="how-to-migrate"></span><h2>How to migrate<a class="headerlink" href="#how-to-migrate" title="Permalink to this headline">¶</a></h2> <div class="section" id="s-replace-generic-views-with-generic-classes"> <span id="replace-generic-views-with-generic-classes"></span><h3>Replace generic views with generic classes<a class="headerlink" href="#replace-generic-views-with-generic-classes" title="Permalink to this headline">¶</a></h3> <p>Existing usage of function-based generic views should be replaced with their class-based analogs:</p> <table class="docutils"> <colgroup> <col width="50%" /> <col width="50%" /> </colgroup> <thead valign="bottom"> <tr class="row-odd"><th class="head">Old function-based generic view</th> <th class="head">New class-based generic view</th> </tr> </thead> <tbody valign="top"> <tr class="row-even"><td><tt class="docutils literal"><span class="pre">django.views.generic.simple.direct_to_template</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.base.TemplateView" title="django.views.generic.base.TemplateView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.base.TemplateView</span></tt></a></td> </tr> <tr class="row-odd"><td><tt class="docutils literal"><span class="pre">django.views.generic.simple.redirect_to</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.base.RedirectView" title="django.views.generic.base.RedirectView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.base.RedirectView</span></tt></a></td> </tr> <tr class="row-even"><td><tt class="docutils literal"><span class="pre">django.views.generic.list_detail.object_list</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.list.ListView" title="django.views.generic.list.ListView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.list.ListView</span></tt></a></td> </tr> <tr class="row-odd"><td><tt class="docutils literal"><span class="pre">django.views.generic.list_detail.object_detail</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.detail.DetailView" title="django.views.generic.detail.DetailView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.detail.DetailView</span></tt></a></td> </tr> <tr class="row-even"><td><tt class="docutils literal"><span class="pre">django.views.generic.create_update.create_object</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.edit.CreateView" title="django.views.generic.edit.CreateView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.edit.CreateView</span></tt></a></td> </tr> <tr class="row-odd"><td><tt class="docutils literal"><span class="pre">django.views.generic.create_update.update_object</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.edit.UpdateView" title="django.views.generic.edit.UpdateView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.edit.UpdateView</span></tt></a></td> </tr> <tr class="row-even"><td><tt class="docutils literal"><span class="pre">django.views.generic.create_update.delete_object</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.edit.DeleteView" title="django.views.generic.edit.DeleteView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.edit.DeleteView</span></tt></a></td> </tr> <tr class="row-odd"><td><tt class="docutils literal"><span class="pre">django.views.generic.date_based.archive_index</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.dates.ArchiveIndexView" title="django.views.generic.dates.ArchiveIndexView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.dates.ArchiveIndexView</span></tt></a></td> </tr> <tr class="row-even"><td><tt class="docutils literal"><span class="pre">django.views.generic.date_based.archive_year</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.dates.YearArchiveView" title="django.views.generic.dates.YearArchiveView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.dates.YearArchiveView</span></tt></a></td> </tr> <tr class="row-odd"><td><tt class="docutils literal"><span class="pre">django.views.generic.date_based.archive_month</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.dates.MonthArchiveView" title="django.views.generic.dates.MonthArchiveView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.dates.MonthArchiveView</span></tt></a></td> </tr> <tr class="row-even"><td><tt class="docutils literal"><span class="pre">django.views.generic.date_based.archive_week</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.dates.WeekArchiveView" title="django.views.generic.dates.WeekArchiveView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.dates.WeekArchiveView</span></tt></a></td> </tr> <tr class="row-odd"><td><tt class="docutils literal"><span class="pre">django.views.generic.date_based.archive_day</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.dates.DayArchiveView" title="django.views.generic.dates.DayArchiveView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.dates.DayArchiveView</span></tt></a></td> </tr> <tr class="row-even"><td><tt class="docutils literal"><span class="pre">django.views.generic.date_based.archive_today</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.dates.TodayArchiveView" title="django.views.generic.dates.TodayArchiveView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.dates.TodayArchiveView</span></tt></a></td> </tr> <tr class="row-odd"><td><tt class="docutils literal"><span class="pre">django.views.generic.date_based.object_detail</span></tt></td> <td><a class="reference internal" href="../ref/class-based-views.html#django.views.generic.dates.DateDetailView" title="django.views.generic.dates.DateDetailView"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.dates.DateDetailView</span></tt></a></td> </tr> </tbody> </table> <p>To do this, replace the reference to the generic view function with a <tt class="docutils literal"><span class="pre">as_view()</span></tt> instantiation of the class-based view. For example, the old-style <tt class="docutils literal"><span class="pre">direct_to_template</span></tt> pattern:</p> <div class="highlight-python"><div class="highlight"><pre><span class="p">(</span><span class="s">'^about/$'</span><span class="p">,</span> <span class="n">direct_to_template</span><span class="p">,</span> <span class="p">{</span><span class="s">'template'</span><span class="p">:</span> <span class="s">'about.html'</span><span class="p">})</span> </pre></div> </div> <p>can be replaced with an instance of <a class="reference internal" href="../ref/class-based-views.html#django.views.generic.base.TemplateView" title="django.views.generic.base.TemplateView"><tt class="xref py py-class docutils literal"><span class="pre">TemplateView</span></tt></a>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="p">(</span><span class="s">'^about/$'</span><span class="p">,</span> <span class="n">TemplateView</span><span class="o">.</span><span class="n">as_view</span><span class="p">(</span><span class="n">template_name</span><span class="o">=</span><span class="s">'about.html'</span><span class="p">))</span> </pre></div> </div> </div> <div class="section" id="s-template-argument-to-direct-to-template-views"> <span id="template-argument-to-direct-to-template-views"></span><h3><tt class="docutils literal"><span class="pre">template</span></tt> argument to <tt class="docutils literal"><span class="pre">direct_to_template</span></tt> views<a class="headerlink" href="#template-argument-to-direct-to-template-views" title="Permalink to this headline">¶</a></h3> <p>The <tt class="docutils literal"><span class="pre">template</span></tt> argument to the <tt class="docutils literal"><span class="pre">direct_to_template</span></tt> view has been renamed <tt class="docutils literal"><span class="pre">template_name</span></tt>. This has been done to maintain consistency with other views.</p> </div> <div class="section" id="s-object-id-argument-to-detail-views"> <span id="object-id-argument-to-detail-views"></span><h3><tt class="docutils literal"><span class="pre">object_id</span></tt> argument to detail views<a class="headerlink" href="#object-id-argument-to-detail-views" title="Permalink to this headline">¶</a></h3> <p>The object_id argument to the <tt class="docutils literal"><span class="pre">object_detail</span></tt> view has been renamed <tt class="docutils literal"><span class="pre">pk</span></tt> on the <a class="reference internal" href="../ref/class-based-views.html#django.views.generic.detail.DetailView" title="django.views.generic.detail.DetailView"><tt class="xref py py-class docutils literal"><span class="pre">DetailView</span></tt></a>.</p> </div> <div class="section" id="s-template-object-name"> <span id="template-object-name"></span><h3><tt class="docutils literal"><span class="pre">template_object_name</span></tt><a class="headerlink" href="#template-object-name" title="Permalink to this headline">¶</a></h3> <p><tt class="docutils literal"><span class="pre">template_object_name</span></tt> has been renamed <tt class="docutils literal"><span class="pre">context_object_name</span></tt>, reflecting the fact that the context data can be used for purposes other than template rendering (e.g., to populate JSON output).</p> </div> <div class="section" id="s-the-list-suffix-on-list-views"> <span id="the-list-suffix-on-list-views"></span><h3>The <tt class="docutils literal"><span class="pre">_list</span></tt> suffix on list views<a class="headerlink" href="#the-list-suffix-on-list-views" title="Permalink to this headline">¶</a></h3> <p>In a function-based <tt class="xref py py-class docutils literal"><span class="pre">ListView</span></tt>, the <tt class="docutils literal"><span class="pre">template_object_name</span></tt> was appended with the suffix <tt class="docutils literal"><span class="pre">'_list'</span></tt> to yield the final context variable name. In a class-based <tt class="docutils literal"><span class="pre">ListView</span></tt>, the <tt class="docutils literal"><span class="pre">context_object_name</span></tt> is used verbatim. The <tt class="docutils literal"><span class="pre">'_list'</span></tt> suffix is only applied when generating a default context object name.</p> </div> <div class="section" id="s-the-context-data-for-object-list-views"> <span id="the-context-data-for-object-list-views"></span><h3>The context data for <tt class="docutils literal"><span class="pre">object_list</span></tt> views<a class="headerlink" href="#the-context-data-for-object-list-views" title="Permalink to this headline">¶</a></h3> <p>The context provided by <a class="reference internal" href="../ref/class-based-views.html#django.views.generic.list.MultipleObjectMixin" title="django.views.generic.list.MultipleObjectMixin"><tt class="xref py py-class docutils literal"><span class="pre">MultipleObjectMixin</span></tt></a> is quite different from that provided by <tt class="docutils literal"><span class="pre">object_list</span></tt>, with most pagination related variables replaced by a single <tt class="docutils literal"><span class="pre">page_obj</span></tt> object. The following are no longer provided:</p> <ul class="simple"> <li><tt class="docutils literal"><span class="pre">first_on_page</span></tt></li> <li><tt class="docutils literal"><span class="pre">has_next</span></tt></li> <li><tt class="docutils literal"><span class="pre">has_previous</span></tt></li> <li><tt class="docutils literal"><span class="pre">hits</span></tt></li> <li><tt class="docutils literal"><span class="pre">last_on_page</span></tt></li> <li><tt class="docutils literal"><span class="pre">next</span></tt></li> <li><tt class="docutils literal"><span class="pre">page_range</span></tt></li> <li><tt class="docutils literal"><span class="pre">page</span></tt></li> <li><tt class="docutils literal"><span class="pre">pages</span></tt></li> <li><tt class="docutils literal"><span class="pre">previous</span></tt></li> <li><tt class="docutils literal"><span class="pre">results_per_page</span></tt></li> </ul> </div> <div class="section" id="s-extra-context"> <span id="extra-context"></span><h3><tt class="docutils literal"><span class="pre">extra_context</span></tt><a class="headerlink" href="#extra-context" title="Permalink to this headline">¶</a></h3> <p>Function-based generic views provided an <tt class="docutils literal"><span class="pre">extra_context</span></tt> argument as way to insert extra items into the context at time of rendering.</p> <p>Class-based views don’t provide an <tt class="docutils literal"><span class="pre">extra_context</span></tt> argument. Instead, you subclass the view, overriding <tt class="xref py py-meth docutils literal"><span class="pre">get_context_data()</span></tt>. For example:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">MyListView</span><span class="p">(</span><span class="n">ListView</span><span class="p">):</span> <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="n">context</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">MyListView</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="n">context</span><span class="o">.</span><span class="n">update</span><span class="p">({</span> <span class="s">'foo'</span><span class="p">:</span> <span class="mi">42</span><span class="p">,</span> <span class="s">'bar'</span><span class="p">:</span> <span class="mi">37</span> <span class="p">})</span> <span class="k">return</span> <span class="n">context</span> </pre></div> </div> </div> <div class="section" id="s-post-save-redirect-argument-to-create-and-update-views"> <span id="post-save-redirect-argument-to-create-and-update-views"></span><h3><tt class="docutils literal"><span class="pre">post_save_redirect</span></tt> argument to create and update views<a class="headerlink" href="#post-save-redirect-argument-to-create-and-update-views" title="Permalink to this headline">¶</a></h3> <p>The <tt class="docutils literal"><span class="pre">post_save_redirect</span></tt> argument to the create and update views has been renamed <tt class="docutils literal"><span class="pre">success_url</span></tt> on the <a class="reference internal" href="../ref/class-based-views.html#django.views.generic.edit.ModelFormMixin" title="django.views.generic.edit.ModelFormMixin"><tt class="xref py py-class docutils literal"><span class="pre">ModelFormMixin</span></tt></a>.</p> </div> <div class="section" id="s-mimetype"> <span id="mimetype"></span><h3><tt class="docutils literal"><span class="pre">mimetype</span></tt><a class="headerlink" href="#mimetype" title="Permalink to this headline">¶</a></h3> <p>Some function-based generic views provided a <tt class="docutils literal"><span class="pre">mimetype</span></tt> argument as way to control the mimetype of the response.</p> <p>Class-based views don’t provide a <tt class="docutils literal"><span class="pre">mimetype</span></tt> argument. Instead, you subclass the view, overriding <tt class="xref py py-meth docutils literal"><span class="pre">TemplateResponseMixin.render_to_response()</span></tt> and pass in arguments for the TemplateResponse constructor. For example:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">MyListView</span><span class="p">(</span><span class="n">ListView</span><span class="p">):</span> <span class="k">def</span> <span class="nf">render_to_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">MyListView</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="s">'application/json'</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> </pre></div> </div> </div> <div class="section" id="s-context-processors"> <span id="context-processors"></span><h3><tt class="docutils literal"><span class="pre">context_processors</span></tt><a class="headerlink" href="#context-processors" title="Permalink to this headline">¶</a></h3> <p>Some function-based generic views provided a <tt class="docutils literal"><span class="pre">context_processors</span></tt> argument that could be used to force the use of specialized context processors when rendering template content.</p> <p>Class-based views don’t provide a <tt class="docutils literal"><span class="pre">context_processors</span></tt> argument. Instead, you subclass the view, overriding <tt class="xref py py-meth docutils literal"><span class="pre">TemplateResponseMixin.render_to_response()</span></tt>, and passing in a context instance that has been instantiated with the processors you want to use. For example:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">MyListView</span><span class="p">(</span><span class="n">ListView</span><span class="p">):</span> <span class="k">def</span> <span class="nf">render_to_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">MyListView</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span> <span class="n">RequestContext</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">processors</span><span class="o">=</span><span class="p">[</span><span class="n">custom_processor</span><span class="p">]),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> </pre></div> </div> </div> </div> </div> </div> </div> </div> <div class="yui-b" id="sidebar"> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="../contents.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Migrating function-based generic views</a><ul> <li><a class="reference internal" href="#how-to-migrate">How to migrate</a><ul> <li><a class="reference internal" href="#replace-generic-views-with-generic-classes">Replace generic views with generic classes</a></li> <li><a class="reference internal" href="#template-argument-to-direct-to-template-views"><tt class="docutils literal"><span class="pre">template</span></tt> argument to <tt class="docutils literal"><span class="pre">direct_to_template</span></tt> views</a></li> <li><a class="reference internal" href="#object-id-argument-to-detail-views"><tt class="docutils literal"><span class="pre">object_id</span></tt> argument to detail views</a></li> <li><a class="reference internal" href="#template-object-name"><tt class="docutils literal"><span class="pre">template_object_name</span></tt></a></li> <li><a class="reference internal" href="#the-list-suffix-on-list-views">The <tt class="docutils literal"><span class="pre">_list</span></tt> suffix on list views</a></li> <li><a class="reference internal" href="#the-context-data-for-object-list-views">The context data for <tt class="docutils literal"><span class="pre">object_list</span></tt> views</a></li> <li><a class="reference internal" href="#extra-context"><tt class="docutils literal"><span class="pre">extra_context</span></tt></a></li> <li><a class="reference internal" href="#post-save-redirect-argument-to-create-and-update-views"><tt class="docutils literal"><span class="pre">post_save_redirect</span></tt> argument to create and update views</a></li> <li><a class="reference internal" href="#mimetype"><tt class="docutils literal"><span class="pre">mimetype</span></tt></a></li> <li><a class="reference internal" href="#context-processors"><tt class="docutils literal"><span class="pre">context_processors</span></tt></a></li> </ul> </li> </ul> </li> </ul> <h3>Browse</h3> <ul> <li>Prev: <a href="class-based-views.html">Class-based generic views</a></li> <li>Next: <a href="files.html">Managing files</a></li> </ul> <h3>You are here:</h3> <ul> <li> <a href="../index.html">Django 1.4.13 documentation</a> <ul><li><a href="index.html">Using Django</a> <ul><li>Migrating function-based generic views</li></ul> </li></ul> </li> </ul> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/topics/generic-views-migration.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <h3>Last update:</h3> <p class="topless">May 15, 2014</p> </div> </div> <div id="ft"> <div class="nav"> « <a href="class-based-views.html" title="Class-based generic views">previous</a> | <a href="index.html" title="Using Django" accesskey="U">up</a> | <a href="files.html" title="Managing files">next</a> »</div> </div> </div> <div class="clearer"></div> </div> </body> </html>