Sophie

Sophie

distrib > Mandriva > current > i586 > media > main-updates > by-pkgid > 57efe471f3561e70a829edf1b0e9f507 > files > 2300

python-django-1.1.4-0.1mdv2010.2.noarch.rpm

<!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>Form preview &mdash; Django v1.1 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.1',
        COLLAPSE_MODINDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../../../_static/jquery.js"></script>
    <script type="text/javascript" src="../../../_static/doctools.js"></script>
    <link rel="top" title="Django v1.1 documentation" href="../../../index.html" />
    <link rel="up" title="django.contrib.formtools" href="index.html" />
    <link rel="next" title="Form wizard" href="form-wizard.html" />
    <link rel="prev" title="django.contrib.formtools" href="index.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 = "../../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 v1.1 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="../../../modindex.html">Modules</a>
      </div>
      <div class="nav">
    &laquo; <a href="index.html" title="django.contrib.formtools">previous</a> 
     |
    <a href="../../index.html" title="API Reference" accesskey="U">up</a>
   |
    <a href="form-wizard.html" title="Form wizard">next</a> &raquo;</div>
    </div>
    
    <div id="bd">
      <div id="yui-main">
        <div class="yui-b">
          <div class="yui-g" id="ref-contrib-formtools-form-preview">
            
  <div class="section" id="s-module-django.contrib.formtools">
<span id="s-ref-contrib-formtools-form-preview"></span><span id="module-django.contrib.formtools"></span><span id="ref-contrib-formtools-form-preview"></span><h1>Form preview<a class="headerlink" href="#module-django.contrib.formtools" title="Permalink to this headline">¶</a></h1>
<p>Django comes with an optional &#8220;form preview&#8221; application that helps automate
the following workflow:</p>
<p>&#8220;Display an HTML form, force a preview, then do something with the submission.&#8221;</p>
<p>To force a preview of a form submission, all you have to do is write a short
Python class.</p>
<div class="section" id="s-overview">
<span id="overview"></span><h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
<p>Given a <a title="django.forms.Form" class="reference external" href="../../forms/api.html#django.forms.Form"><tt class="xref docutils literal"><span class="pre">django.forms.Form</span></tt></a> subclass that you define, this
application takes care of the following workflow:</p>
<ol class="arabic simple">
<li>Displays the form as HTML on a Web page.</li>
<li>Validates the form data when it&#8217;s submitted via POST.
a. If it&#8217;s valid, displays a preview page.
b. If it&#8217;s not valid, redisplays the form with error messages.</li>
<li>When the &#8220;confirmation&#8221; form is submitted from the preview page, calls
a hook that you define &#8211; a
<tt class="xref docutils literal"><span class="pre">done()</span></tt> method that gets
passed the valid data.</li>
</ol>
<p>The framework enforces the required preview by passing a shared-secret hash to
the preview page via hidden form fields. If somebody tweaks the form parameters
on the preview page, the form submission will fail the hash-comparison test.</p>
</div>
<div class="section" id="s-how-to-use-formpreview">
<span id="how-to-use-formpreview"></span><h2>How to use <tt class="docutils literal"><span class="pre">FormPreview</span></tt><a class="headerlink" href="#how-to-use-formpreview" title="Permalink to this headline">¶</a></h2>
<ol class="arabic">
<li><p class="first">Point Django at the default FormPreview templates. There are two ways to
do this:</p>
<ul class="simple">
<li>Add <tt class="docutils literal"><span class="pre">'django.contrib.formtools'</span></tt> to your
<a class="reference external" href="../../settings.html#setting-INSTALLED_APPS"><tt class="xref docutils literal"><span class="pre">INSTALLED_APPS</span></tt></a> setting. This will work if your
<a class="reference external" href="../../settings.html#setting-TEMPLATE_LOADERS"><tt class="xref docutils literal"><span class="pre">TEMPLATE_LOADERS</span></tt></a> setting includes the
<tt class="docutils literal"><span class="pre">app_directories</span></tt> template loader (which is the case by
default). See the <a class="reference external" href="../../templates/api.html#template-loaders"><em>template loader docs</em></a>
for more.</li>
<li>Otherwise, determine the full filesystem path to the
<tt class="docutils literal"><span class="pre">django/contrib/formtools/templates</span></tt> directory, and add that
directory to your <a class="reference external" href="../../settings.html#setting-TEMPLATE_DIRS"><tt class="xref docutils literal"><span class="pre">TEMPLATE_DIRS</span></tt></a> setting.</li>
</ul>
</li>
<li><p class="first">Create a <a title="django.contrib.formtools.FormPreview" class="reference internal" href="#django.contrib.formtools.FormPreview"><tt class="xref docutils literal"><span class="pre">FormPreview</span></tt></a> subclass that
overrides the <tt class="xref docutils literal"><span class="pre">done()</span></tt>
method:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">django.contrib.formtools.preview</span> <span class="kn">import</span> <span class="n">FormPreview</span>
<span class="kn">from</span> <span class="nn">myapp.models</span> <span class="kn">import</span> <span class="n">SomeModel</span>

<span class="k">class</span> <span class="nc">SomeModelFormPreview</span><span class="p">(</span><span class="n">FormPreview</span><span class="p">):</span>

    <span class="k">def</span> <span class="nf">done</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">cleaned_data</span><span class="p">):</span>
        <span class="c"># Do something with the cleaned_data, then redirect</span>
        <span class="c"># to a &quot;success&quot; page.</span>
        <span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span><span class="s">&#39;/form/success&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p>This method takes an <a title="django.http.HttpRequest" class="reference external" href="../../request-response.html#django.http.HttpRequest"><tt class="xref docutils literal"><span class="pre">HttpRequest</span></tt></a> object and a
dictionary of the form data after it has been validated and cleaned.
It should return an <a title="django.http.HttpResponseRedirect" class="reference external" href="../../request-response.html#django.http.HttpResponseRedirect"><tt class="xref docutils literal"><span class="pre">HttpResponseRedirect</span></tt></a> that
is the end result of the form being submitted.</p>
</li>
<li><p class="first">Change your URLconf to point to an instance of your
<a title="django.contrib.formtools.FormPreview" class="reference internal" href="#django.contrib.formtools.FormPreview"><tt class="xref docutils literal"><span class="pre">FormPreview</span></tt></a> subclass:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">myapp.preview</span> <span class="kn">import</span> <span class="n">SomeModelFormPreview</span>
<span class="kn">from</span> <span class="nn">myapp.forms</span> <span class="kn">import</span> <span class="n">SomeModelForm</span>
<span class="kn">from</span> <span class="nn">django</span> <span class="kn">import</span> <span class="n">forms</span>
</pre></div>
</div>
<p>...and add the following line to the appropriate model in your URLconf:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="p">(</span><span class="s">r&#39;^post/$&#39;</span><span class="p">,</span> <span class="n">SomeModelFormPreview</span><span class="p">(</span><span class="n">SomeModelForm</span><span class="p">)),</span>
</pre></div>
</div>
<p>where <tt class="docutils literal"><span class="pre">SomeModelForm</span></tt> is a Form or ModelForm class for the model.</p>
</li>
<li><p class="first">Run the Django server and visit <tt class="docutils literal"><span class="pre">/post/</span></tt> in your browser.</p>
</li>
</ol>
</div>
<div class="section" id="s-formpreview-classes">
<span id="formpreview-classes"></span><h2><tt class="docutils literal"><span class="pre">FormPreview</span></tt> classes<a class="headerlink" href="#formpreview-classes" title="Permalink to this headline">¶</a></h2>
<dl class="class">
<dt id="django.contrib.formtools.FormPreview">
<em class="property">class </em><tt class="descname">FormPreview</tt><a class="headerlink" href="#django.contrib.formtools.FormPreview" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>A <a title="django.contrib.formtools.FormPreview" class="reference internal" href="#django.contrib.formtools.FormPreview"><tt class="xref docutils literal"><span class="pre">FormPreview</span></tt></a> class is a simple Python class
that represents the preview workflow.
<a title="django.contrib.formtools.FormPreview" class="reference internal" href="#django.contrib.formtools.FormPreview"><tt class="xref docutils literal"><span class="pre">FormPreview</span></tt></a> classes must subclass
<tt class="docutils literal"><span class="pre">django.contrib.formtools.preview.FormPreview</span></tt> and override the
<tt class="xref docutils literal"><span class="pre">done()</span></tt> method. They can live
anywhere in your codebase.</p>
</div>
<div class="section" id="s-formpreview-templates">
<span id="formpreview-templates"></span><h2><tt class="docutils literal"><span class="pre">FormPreview</span></tt> templates<a class="headerlink" href="#formpreview-templates" title="Permalink to this headline">¶</a></h2>
<p>By default, the form is rendered via the template <tt class="docutils literal"><span class="pre">formtools/form.html</span></tt>,
and the preview page is rendered via the template <tt class="docutils literal"><span class="pre">formtools/preview.html</span></tt>.
These values can be overridden for a particular form preview by setting
<tt class="xref docutils literal"><span class="pre">preview_template</span></tt> and
<tt class="xref docutils literal"><span class="pre">form_template</span></tt> attributes on the
FormPreview subclass. See <tt class="docutils literal"><span class="pre">django/contrib/formtools/templates</span></tt> for the
default templates.</p>
</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 external" href="#">Form preview</a><ul>
<li><a class="reference external" href="#overview">Overview</a></li>
<li><a class="reference external" href="#how-to-use-formpreview">How to use <tt class="docutils literal"><span class="pre">FormPreview</span></tt></a></li>
<li><a class="reference external" href="#formpreview-classes"><tt class="docutils literal"><span class="pre">FormPreview</span></tt> classes</a></li>
<li><a class="reference external" href="#formpreview-templates"><tt class="docutils literal"><span class="pre">FormPreview</span></tt> templates</a></li>
</ul>
</li>
</ul>

  <h3>Browse</h3>
  <ul>
    
      <li>Prev: <a href="index.html">django.contrib.formtools</a></li>
    
    
      <li>Next: <a href="form-wizard.html">Form wizard</a></li>
    
  </ul>
  <h3>You are here:</h3>
  <ul>
      <li>
        <a href="../../../index.html">Django v1.1 documentation</a>
        
          <ul><li><a href="../../index.html">API Reference</a>
        
          <ul><li><a href="../index.html"><tt class="docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal docutils literal"><span class="pre">contrib</span></tt> packages</a>
        
          <ul><li><a href="index.html">django.contrib.formtools</a>
        
        <ul><li>Form preview</li></ul>
        </li></ul></li></ul></li></ul>
      </li>
  </ul>  

            <h3>This Page</h3>
            <ul class="this-page-menu">
              <li><a href="../../../_sources/ref/contrib/formtools/form-preview.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" size="18" />
                <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">Feb 18, 2011</p>
          </div> 
        
      
    </div>
    
    <div id="ft">
      <div class="nav">
    &laquo; <a href="index.html" title="django.contrib.formtools">previous</a> 
     |
    <a href="../../index.html" title="API Reference" accesskey="U">up</a>
   |
    <a href="form-wizard.html" title="Form wizard">next</a> &raquo;</div>
    </div>
  </div>

      <div class="clearer"></div>
    </div>
  </body>
</html>