diff options
Diffstat (limited to 'studio/static/doc/flask-docs/upgrading.html')
-rw-r--r-- | studio/static/doc/flask-docs/upgrading.html | 421 |
1 files changed, 421 insertions, 0 deletions
diff --git a/studio/static/doc/flask-docs/upgrading.html b/studio/static/doc/flask-docs/upgrading.html new file mode 100644 index 0000000..258ab34 --- /dev/null +++ b/studio/static/doc/flask-docs/upgrading.html @@ -0,0 +1,421 @@ + +<!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>Upgrading to Newer Releases — Flask 0.8 documentation</title> + + <link rel="stylesheet" href="_static/flasky.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: '', + VERSION: '0.8', + 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="Flask 0.8 documentation" href="index.html" /> + <link rel="next" title="Flask Changelog" href="changelog.html" /> + <link rel="prev" title="Pocoo Styleguide" href="styleguide.html" /> + + + <link rel="apple-touch-icon" href="_static/touch-icon.png" /> + + <link media="only screen and (max-device-width: 480px)" href="_static/small_flask.css" type= "text/css" rel="stylesheet" /> + + </head> + <body> + <div class="related"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="changelog.html" title="Flask Changelog" + accesskey="N">next</a> |</li> + <li class="right" > + <a href="styleguide.html" title="Pocoo Styleguide" + accesskey="P">previous</a> |</li> + <li><a href="index.html">Flask 0.8 documentation</a> »</li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body"> + + <div class="section" id="upgrading-to-newer-releases"> +<h1>Upgrading to Newer Releases<a class="headerlink" href="#upgrading-to-newer-releases" title="Permalink to this headline">¶</a></h1> +<p>Flask itself is changing like any software is changing over time. Most of +the changes are the nice kind, the kind where you don’t have to change +anything in your code to profit from a new release.</p> +<p>However every once in a while there are changes that do require some +changes in your code or there are changes that make it possible for you to +improve your own code quality by taking advantage of new features in +Flask.</p> +<p>This section of the documentation enumerates all the changes in Flask from +release to release and how you can change your code to have a painless +updating experience.</p> +<p>If you want to use the <cite>easy_install</cite> command to upgrade your Flask +installation, make sure to pass it the <tt class="docutils literal"><span class="pre">-U</span></tt> parameter:</p> +<div class="highlight-python"><pre>$ easy_install -U Flask</pre> +</div> +<div class="section" id="version-0-8"> +<h2>Version 0.8<a class="headerlink" href="#version-0-8" title="Permalink to this headline">¶</a></h2> +<p>Flask introduced a new session interface system. We also noticed that +there was a naming collision between <cite>flask.session</cite> the module that +implements sessions and <a class="reference internal" href="api.html#flask.session" title="flask.session"><tt class="xref py py-data docutils literal"><span class="pre">flask.session</span></tt></a> which is the global session +object. With that introduction we moved the implementation details for +the session system into a new module called <tt class="xref py py-mod docutils literal"><span class="pre">flask.sessions</span></tt>. If you +used the previously undocumented session support we urge you to upgrade.</p> +<p>If invalid JSON data was submitted Flask will now raise a +<a class="reference external" href="http://werkzeug.pocoo.org/docs/exceptions/#werkzeug.exceptions.BadRequest" title="(in Werkzeug v0.7)"><tt class="xref py py-exc docutils literal"><span class="pre">BadRequest</span></tt></a> exception instead of letting the +default <a class="reference external" href="http://docs.python.org/dev/library/exceptions.html#ValueError" title="(in Python v3.3)"><tt class="xref py py-exc docutils literal"><span class="pre">ValueError</span></tt></a> bubble up. This has the advantage that you no +longer have to handle that error to avoid an internal server error showing +up for the user. If you were catching this down explicitly in the past +as <cite>ValueError</cite> you will need to change this.</p> +<p>Due to a bug in the test client Flask 0.7 did not trigger teardown +handlers when the test client was used in a with statement. This was +since fixed but might require some changes in your testsuites if you +relied on this behavior.</p> +</div> +<div class="section" id="version-0-7"> +<h2>Version 0.7<a class="headerlink" href="#version-0-7" title="Permalink to this headline">¶</a></h2> +<p>In Flask 0.7 we cleaned up the code base internally a lot and did some +backwards incompatible changes that make it easier to implement larger +applications with Flask. Because we want to make upgrading as easy as +possible we tried to counter the problems arising from these changes by +providing a script that can ease the transition.</p> +<p>The script scans your whole application and generates an unified diff with +changes it assumes are safe to apply. However as this is an automated +tool it won’t be able to find all use cases and it might miss some. We +internally spread a lot of deprecation warnings all over the place to make +it easy to find pieces of code that it was unable to upgrade.</p> +<p>We strongly recommend that you hand review the generated patchfile and +only apply the chunks that look good.</p> +<p>If you are using git as version control system for your project we +recommend applying the patch with <tt class="docutils literal"><span class="pre">path</span> <span class="pre">-p1</span> <span class="pre"><</span> <span class="pre">patchfile.diff</span></tt> and then +using the interactive commit feature to only apply the chunks that look +good.</p> +<p>To apply the upgrade script do the following:</p> +<ol class="arabic"> +<li><p class="first">Download the script: <a class="reference external" href="https://raw.github.com/mitsuhiko/flask/master/scripts/flask-07-upgrade.py">flask-07-upgrade.py</a></p> +</li> +<li><p class="first">Run it in the directory of your application:</p> +<div class="highlight-python"><pre>python flask-07-upgrade.py > patchfile.diff</pre> +</div> +</li> +<li><p class="first">Review the generated patchfile.</p> +</li> +<li><p class="first">Apply the patch:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="n">patch</span> <span class="o">-</span><span class="n">p1</span> <span class="o"><</span> <span class="n">patchfile</span><span class="o">.</span><span class="n">diff</span> +</pre></div> +</div> +</li> +<li><p class="first">If you were using per-module template folders you need to move some +templates around. Previously if you had a folder named <tt class="docutils literal"><span class="pre">templates</span></tt> +next to a blueprint named <tt class="docutils literal"><span class="pre">admin</span></tt> the implicit template path +automatically was <tt class="docutils literal"><span class="pre">admin/index.html</span></tt> for a template file called +<tt class="docutils literal"><span class="pre">templates/index.html</span></tt>. This no longer is the case. Now you need +to name the template <tt class="docutils literal"><span class="pre">templates/admin/index.html</span></tt>. The tool will +not detect this so you will have to do that on your own.</p> +</li> +</ol> +<p>Please note that deprecation warnings are disabled by default starting +with Python 2.7. In order to see the deprecation warnings that might be +emitted you have to enabled them with the <a class="reference external" href="http://docs.python.org/dev/library/warnings.html#warnings" title="(in Python v3.3)"><tt class="xref py py-mod docutils literal"><span class="pre">warnings</span></tt></a> module.</p> +<p>If you are working with windows and you lack the <cite>patch</cite> command line +utility you can get it as part of various Unix runtime environments for +windows including cygwin, msysgit or ming32. Also source control systems +like svn, hg or git have builtin support for applying unified diffs as +generated by the tool. Check the manual of your version control system +for more information.</p> +<div class="section" id="bug-in-request-locals"> +<h3>Bug in Request Locals<a class="headerlink" href="#bug-in-request-locals" title="Permalink to this headline">¶</a></h3> +<p>Due to a bug in earlier implementations the request local proxies now +raise a <a class="reference external" href="http://docs.python.org/dev/library/exceptions.html#RuntimeError" title="(in Python v3.3)"><tt class="xref py py-exc docutils literal"><span class="pre">RuntimeError</span></tt></a> instead of an <a class="reference external" href="http://docs.python.org/dev/library/exceptions.html#AttributeError" title="(in Python v3.3)"><tt class="xref py py-exc docutils literal"><span class="pre">AttributeError</span></tt></a> when they +are unbound. If you caught these exceptions with <a class="reference external" href="http://docs.python.org/dev/library/exceptions.html#AttributeError" title="(in Python v3.3)"><tt class="xref py py-exc docutils literal"><span class="pre">AttributeError</span></tt></a> +before, you should catch them with <a class="reference external" href="http://docs.python.org/dev/library/exceptions.html#RuntimeError" title="(in Python v3.3)"><tt class="xref py py-exc docutils literal"><span class="pre">RuntimeError</span></tt></a> now.</p> +<p>Additionally the <a class="reference internal" href="api.html#flask.send_file" title="flask.send_file"><tt class="xref py py-func docutils literal"><span class="pre">send_file()</span></tt></a> function is now issuing +deprecation warnings if you depend on functionality that will be removed +in Flask 1.0. Previously it was possible to use etags and mimetypes +when file objects were passed. This was unreliable and caused issues +for a few setups. If you get a deprecation warning, make sure to +update your application to work with either filenames there or disable +etag attaching and attach them yourself.</p> +<p>Old code:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="k">return</span> <span class="n">send_file</span><span class="p">(</span><span class="n">my_file_object</span><span class="p">)</span> +<span class="k">return</span> <span class="n">send_file</span><span class="p">(</span><span class="n">my_file_object</span><span class="p">)</span> +</pre></div> +</div> +<p>New code:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="k">return</span> <span class="n">send_file</span><span class="p">(</span><span class="n">my_file_object</span><span class="p">,</span> <span class="n">add_etags</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span> +</pre></div> +</div> +</div> +<div class="section" id="upgrading-to-new-teardown-handling"> +<span id="id1"></span><h3>Upgrading to new Teardown Handling<a class="headerlink" href="#upgrading-to-new-teardown-handling" title="Permalink to this headline">¶</a></h3> +<p>We streamlined the behavior of the callbacks for request handling. For +things that modify the response the <a class="reference internal" href="api.html#flask.Flask.after_request" title="flask.Flask.after_request"><tt class="xref py py-meth docutils literal"><span class="pre">after_request()</span></tt></a> +decorators continue to work as expected, but for things that absolutely +must happen at the end of request we introduced the new +<a class="reference internal" href="api.html#flask.Flask.teardown_request" title="flask.Flask.teardown_request"><tt class="xref py py-meth docutils literal"><span class="pre">teardown_request()</span></tt></a> decorator. Unfortunately that +change also made after-request work differently under error conditions. +It’s not consistently skipped if exceptions happen whereas previously it +might have been called twice to ensure it is executed at the end of the +request.</p> +<p>If you have database connection code that looks like this:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="nd">@app.after_request</span> +<span class="k">def</span> <span class="nf">after_request</span><span class="p">(</span><span class="n">response</span><span class="p">):</span> + <span class="n">g</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="k">return</span> <span class="n">response</span> +</pre></div> +</div> +<p>You are now encouraged to use this instead:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="nd">@app.teardown_request</span> +<span class="k">def</span> <span class="nf">after_request</span><span class="p">(</span><span class="n">exception</span><span class="p">):</span> + <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">g</span><span class="p">,</span> <span class="s">'db'</span><span class="p">):</span> + <span class="n">g</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</pre></div> +</div> +<p>On the upside this change greatly improves the internal code flow and +makes it easier to customize the dispatching and error handling. This +makes it now a lot easier to write unit tests as you can prevent closing +down of database connections for a while. You can take advantage of the +fact that the teardown callbacks are called when the response context is +removed from the stack so a test can query the database after request +handling:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="k">with</span> <span class="n">app</span><span class="o">.</span><span class="n">test_client</span><span class="p">()</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span> + <span class="n">resp</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'/'</span><span class="p">)</span> + <span class="c"># g.db is still bound if there is such a thing</span> + +<span class="c"># and here it's gone</span> +</pre></div> +</div> +</div> +<div class="section" id="manual-error-handler-attaching"> +<h3>Manual Error Handler Attaching<a class="headerlink" href="#manual-error-handler-attaching" title="Permalink to this headline">¶</a></h3> +<p>While it is still possible to attach error handlers to +<tt class="xref py py-attr docutils literal"><span class="pre">Flask.error_handlers</span></tt> it’s discouraged to do so and in fact +deprecated. In generaly we no longer recommend custom error handler +attaching via assignments to the underlying dictionary due to the more +complex internal handling to support arbitrary exception classes and +blueprints. See <tt class="xref py py-meth docutils literal"><span class="pre">Flask.errorhandler()</span></tt> for more information.</p> +<p>The proper upgrade is to change this:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="n">app</span><span class="o">.</span><span class="n">error_handlers</span><span class="p">[</span><span class="mi">403</span><span class="p">]</span> <span class="o">=</span> <span class="n">handle_error</span> +</pre></div> +</div> +<p>Into this:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="n">app</span><span class="o">.</span><span class="n">register_error_handler</span><span class="p">(</span><span class="mi">403</span><span class="p">,</span> <span class="n">handle_error</span><span class="p">)</span> +</pre></div> +</div> +<p>Alternatively you should just attach the function with a decorator:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="nd">@app.errorhandler</span><span class="p">(</span><span class="mi">403</span><span class="p">)</span> +<span class="k">def</span> <span class="nf">handle_error</span><span class="p">(</span><span class="n">e</span><span class="p">):</span> + <span class="o">...</span> +</pre></div> +</div> +<p>(Note that <tt class="xref py py-meth docutils literal"><span class="pre">register_error_handler()</span></tt> is new in Flask 0.7)</p> +</div> +<div class="section" id="blueprint-support"> +<h3>Blueprint Support<a class="headerlink" href="#blueprint-support" title="Permalink to this headline">¶</a></h3> +<p>Blueprints replace the previous concept of “Modules” in Flask. They +provide better semantics for various features and work better with large +applications. The update script provided should be able to upgrade your +applications automatically, but there might be some cases where it fails +to upgrade. What changed?</p> +<ul class="simple"> +<li>Blueprints need explicit names. Modules had an automatic name +guesssing scheme where the shortname for the module was taken from the +last part of the import module. The upgrade script tries to guess +that name but it might fail as this information could change at +runtime.</li> +<li>Blueprints have an inverse behavior for <tt class="xref py py-meth docutils literal"><span class="pre">url_for()</span></tt>. Previously +<tt class="docutils literal"><span class="pre">.foo</span></tt> told <tt class="xref py py-meth docutils literal"><span class="pre">url_for()</span></tt> that it should look for the endpoint +<cite>foo</cite> on the application. Now it means “relative to current module”. +The script will inverse all calls to <tt class="xref py py-meth docutils literal"><span class="pre">url_for()</span></tt> automatically for +you. It will do this in a very eager way so you might end up with +some unnecessary leading dots in your code if you’re not using +modules.</li> +<li>Blueprints do not automatically provide static folders. They will +also no longer automatically export templates from a folder called +<cite>templates</cite> next to their location however but it can be enabled from +the constructor. Same with static files: if you want to continue +serving static files you need to tell the constructor explicitly the +path to the static folder (which can be relative to the blueprint’s +module path).</li> +<li>Rendering templates was simplified. Now the blueprints can provide +template folders which are added to a general template searchpath. +This means that you need to add another subfolder with the blueprint’s +name into that folder if you want <tt class="docutils literal"><span class="pre">blueprintname/template.html</span></tt> as +the template name.</li> +</ul> +<p>If you continue to use the <cite>Module</cite> object which is deprecated, Flask will +restore the previous behavior as good as possible. However we strongly +recommend upgrading to the new blueprints as they provide a lot of useful +improvement such as the ability to attach a blueprint multiple times, +blueprint specific error handlers and a lot more.</p> +</div> +</div> +<div class="section" id="version-0-6"> +<h2>Version 0.6<a class="headerlink" href="#version-0-6" title="Permalink to this headline">¶</a></h2> +<p>Flask 0.6 comes with a backwards incompatible change which affects the +order of after-request handlers. Previously they were called in the order +of the registration, now they are called in reverse order. This change +was made so that Flask behaves more like people expected it to work and +how other systems handle request pre- and postprocessing. If you +depend on the order of execution of post-request functions, be sure to +change the order.</p> +<p>Another change that breaks backwards compatibility is that context +processors will no longer override values passed directly to the template +rendering function. If for example <cite>request</cite> is as variable passed +directly to the template, the default context processor will not override +it with the current request object. This makes it easier to extend +context processors later to inject additional variables without breaking +existing template not expecting them.</p> +</div> +<div class="section" id="version-0-5"> +<h2>Version 0.5<a class="headerlink" href="#version-0-5" title="Permalink to this headline">¶</a></h2> +<p>Flask 0.5 is the first release that comes as a Python package instead of a +single module. There were a couple of internal refactoring so if you +depend on undocumented internal details you probably have to adapt the +imports.</p> +<p>The following changes may be relevant to your application:</p> +<ul class="simple"> +<li>autoescaping no longer happens for all templates. Instead it is +configured to only happen on files ending with <tt class="docutils literal"><span class="pre">.html</span></tt>, <tt class="docutils literal"><span class="pre">.htm</span></tt>, +<tt class="docutils literal"><span class="pre">.xml</span></tt> and <tt class="docutils literal"><span class="pre">.xhtml</span></tt>. If you have templates with different +extensions you should override the +<a class="reference internal" href="api.html#flask.Flask.select_jinja_autoescape" title="flask.Flask.select_jinja_autoescape"><tt class="xref py py-meth docutils literal"><span class="pre">select_jinja_autoescape()</span></tt></a> method.</li> +<li>Flask no longer supports zipped applications in this release. This +functionality might come back in future releases if there is demand +for this feature. Removing support for this makes the Flask internal +code easier to understand and fixes a couple of small issues that make +debugging harder than necessary.</li> +<li>The <cite>create_jinja_loader</cite> function is gone. If you want to customize +the Jinja loader now, use the +<a class="reference internal" href="api.html#flask.Flask.create_jinja_environment" title="flask.Flask.create_jinja_environment"><tt class="xref py py-meth docutils literal"><span class="pre">create_jinja_environment()</span></tt></a> method instead.</li> +</ul> +</div> +<div class="section" id="version-0-4"> +<h2>Version 0.4<a class="headerlink" href="#version-0-4" title="Permalink to this headline">¶</a></h2> +<p>For application developers there are no changes that require changes in +your code. In case you are developing on a Flask extension however, and +that extension has a unittest-mode you might want to link the activation +of that mode to the new <tt class="docutils literal"><span class="pre">TESTING</span></tt> flag.</p> +</div> +<div class="section" id="version-0-3"> +<h2>Version 0.3<a class="headerlink" href="#version-0-3" title="Permalink to this headline">¶</a></h2> +<p>Flask 0.3 introduces configuration support and logging as well as +categories for flashing messages. All these are features that are 100% +backwards compatible but you might want to take advantage of them.</p> +<div class="section" id="configuration-support"> +<h3>Configuration Support<a class="headerlink" href="#configuration-support" title="Permalink to this headline">¶</a></h3> +<p>The configuration support makes it easier to write any kind of application +that requires some sort of configuration. (Which most likely is the case +for any application out there).</p> +<p>If you previously had code like this:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="n">app</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="n">DEBUG</span> +<span class="n">app</span><span class="o">.</span><span class="n">secret_key</span> <span class="o">=</span> <span class="n">SECRET_KEY</span> +</pre></div> +</div> +<p>You no longer have to do that, instead you can just load a configuration +into the config object. How this works is outlined in <a class="reference internal" href="config.html#config"><em>Configuration Handling</em></a>.</p> +</div> +<div class="section" id="logging-integration"> +<h3>Logging Integration<a class="headerlink" href="#logging-integration" title="Permalink to this headline">¶</a></h3> +<p>Flask now configures a logger for you with some basic and useful defaults. +If you run your application in production and want to profit from +automatic error logging, you might be interested in attaching a proper log +handler. Also you can start logging warnings and errors into the logger +when appropriately. For more information on that, read +<a class="reference internal" href="errorhandling.html#application-errors"><em>Handling Application Errors</em></a>.</p> +</div> +<div class="section" id="categories-for-flash-messages"> +<h3>Categories for Flash Messages<a class="headerlink" href="#categories-for-flash-messages" title="Permalink to this headline">¶</a></h3> +<p>Flash messages can now have categories attached. This makes it possible +to render errors, warnings or regular messages differently for example. +This is an opt-in feature because it requires some rethinking in the code.</p> +<p>Read all about that in the <a class="reference internal" href="patterns/flashing.html#message-flashing-pattern"><em>Message Flashing</em></a> pattern.</p> +</div> +</div> +</div> + + + </div> + </div> + </div> + <div class="sphinxsidebar"> + <div class="sphinxsidebarwrapper"><p class="logo"><a href="index.html"> + <img class="logo" src="_static/flask.png" alt="Logo"/> +</a></p> + <h3><a href="index.html">Table Of Contents</a></h3> + <ul> +<li><a class="reference internal" href="#">Upgrading to Newer Releases</a><ul> +<li><a class="reference internal" href="#version-0-8">Version 0.8</a></li> +<li><a class="reference internal" href="#version-0-7">Version 0.7</a><ul> +<li><a class="reference internal" href="#bug-in-request-locals">Bug in Request Locals</a></li> +<li><a class="reference internal" href="#upgrading-to-new-teardown-handling">Upgrading to new Teardown Handling</a></li> +<li><a class="reference internal" href="#manual-error-handler-attaching">Manual Error Handler Attaching</a></li> +<li><a class="reference internal" href="#blueprint-support">Blueprint Support</a></li> +</ul> +</li> +<li><a class="reference internal" href="#version-0-6">Version 0.6</a></li> +<li><a class="reference internal" href="#version-0-5">Version 0.5</a></li> +<li><a class="reference internal" href="#version-0-4">Version 0.4</a></li> +<li><a class="reference internal" href="#version-0-3">Version 0.3</a><ul> +<li><a class="reference internal" href="#configuration-support">Configuration Support</a></li> +<li><a class="reference internal" href="#logging-integration">Logging Integration</a></li> +<li><a class="reference internal" href="#categories-for-flash-messages">Categories for Flash Messages</a></li> +</ul> +</li> +</ul> +</li> +</ul> +<h3>Related Topics</h3> +<ul> + <li><a href="index.html">Documentation overview</a><ul> + <li>Previous: <a href="styleguide.html" title="previous chapter">Pocoo Styleguide</a></li> + <li>Next: <a href="changelog.html" title="next chapter">Flask Changelog</a></li> + </ul></li> +</ul> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="_sources/upgrading.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> + <div class="clearer"></div> + </div> + <div class="footer"> + © Copyright 2010, Armin Ronacher. + Created using <a href="http://sphinx.pocoo.org/">Sphinx</a>. + </div> + </body> +</html>
\ No newline at end of file |