diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/add_ons.txt | 20 | ||||
| -rw-r--r-- | docs/django-admin.txt | 36 | ||||
| -rw-r--r-- | docs/generic_views.txt | 7 | ||||
| -rw-r--r-- | docs/install.txt | 16 | ||||
| -rw-r--r-- | docs/middleware.txt | 2 | ||||
| -rw-r--r-- | docs/model-api.txt | 11 | ||||
| -rw-r--r-- | docs/newforms.txt | 17 | ||||
| -rw-r--r-- | docs/release_notes_0.96.txt | 264 | ||||
| -rw-r--r-- | docs/request_response.txt | 1 | ||||
| -rw-r--r-- | docs/serialization.txt | 3 | ||||
| -rw-r--r-- | docs/sessions.txt | 2 | ||||
| -rw-r--r-- | docs/settings.txt | 11 | ||||
| -rw-r--r-- | docs/templates.txt | 18 | ||||
| -rw-r--r-- | docs/testing.txt | 8 | ||||
| -rw-r--r-- | docs/url_dispatch.txt | 4 |
15 files changed, 315 insertions, 105 deletions
diff --git a/docs/add_ons.txt b/docs/add_ons.txt index 1756fe5720..9809cf46f8 100644 --- a/docs/add_ons.txt +++ b/docs/add_ons.txt @@ -1,6 +1,6 @@ -===================== -The "contrib" add-ons -===================== +============================ +The "django.contrib" add-ons +============================ Django aims to follow Python's `"batteries included" philosophy`_. It ships with a variety of extra, optional tools that solve common Web-development @@ -51,8 +51,6 @@ See the `csrf documentation`_. formtools ========= -**New in Django development version** - A set of high-level abstractions for Django forms (django.newforms). django.contrib.formtools.preview @@ -142,8 +140,6 @@ See the `flatpages documentation`_. localflavor =========== -**New in Django development version** - A collection of various Django snippets that are useful only for a particular country or culture. For example, ``django.contrib.localflavor.usa.forms`` contains a ``USZipCodeField`` that you can use to validate U.S. zip codes. @@ -153,12 +149,16 @@ markup A collection of template filters that implement these common markup languages: - * Textile - * Markdown - * ReST (ReStructured Text) + * `Textile`_ + * `Markdown`_ + * `ReST (ReStructured Text)`_ For documentation, read the source code in django/contrib/markup/templatetags/markup.py. +.. _Textile: http://en.wikipedia.org/wiki/Textile_%28markup_language%29 +.. _Markdown: http://en.wikipedia.org/wiki/Markdown +.. _ReST (ReStructured Text): http://en.wikipedia.org/wiki/ReStructuredText + redirects ========= diff --git a/docs/django-admin.txt b/docs/django-admin.txt index ef1d73cdbd..b6028dc2a0 100644 --- a/docs/django-admin.txt +++ b/docs/django-admin.txt @@ -100,8 +100,6 @@ if you're ever curious to see the full list of defaults. dumpdata [appname appname ...] ------------------------------ -**New in Django development version** - Output to standard output all data in the database associated with the named application(s). @@ -117,8 +115,6 @@ The output of ``dumpdata`` can be used as input for ``loaddata``. flush ----- -**New in Django development version** - Return the database to the state it was in immediately after syncdb was executed. This means that all data will be removed from the database, any post-synchronization handlers will be re-executed, and the ``initial_data`` @@ -165,18 +161,9 @@ needed. ``inspectdb`` works with PostgreSQL, MySQL and SQLite. Foreign-key detection only works in PostgreSQL and with certain types of MySQL tables. -install [appname appname ...] ------------------------------ - -**Removed in Django development version** - -Executes the equivalent of ``sqlall`` for the given appnames. - loaddata [fixture fixture ...] ------------------------------ -**New in Django development version** - Searches for and loads the contents of the named fixture into the database. A *Fixture* is a collection of files that contain the serialized contents of @@ -350,14 +337,12 @@ Prints the DROP TABLE SQL statements for the given appnames. sqlcustom [appname appname ...] ------------------------------- -**New in Django development version** - Prints the custom SQL statements for the given appnames. For each model in each specified app, this command looks for the file ``<appname>/sql/<modelname>.sql``, where ``<appname>`` is the given appname and ``<modelname>`` is the model's name in lowercase. For example, if you have an -app ``news`` that includes a ``Story`` model, ``sqlinitialdata`` will attempt +app ``news`` that includes a ``Story`` model, ``sqlcustom`` will attempt to read a file ``news/sql/story.sql`` and append it to the output of this command. @@ -373,13 +358,6 @@ sqlindexes [appname appname ...] Prints the CREATE INDEX SQL statements for the given appnames. -sqlinitialdata [appname appname ...] --------------------------------------------- - -**Removed in Django development version** - -This method has been renamed ``sqlcustom`` in the development version of Django. - sqlreset [appname appname ...] -------------------------------------- @@ -426,8 +404,6 @@ fixture data files. test ---- -**New in Django development version** - Discover and run tests for all installed models. See `Testing Django applications`_ for more information. .. _testing django applications: ../testing/ @@ -475,8 +451,6 @@ setting the Python path for you. --format -------- -**New in Django development version** - Example usage:: django-admin.py dumpdata --format=xml @@ -493,8 +467,6 @@ options. --indent -------- -**New in Django development version** - Example usage:: django-admin.py dumpdata --indent=4 @@ -506,8 +478,6 @@ Pretty-printing will only be enabled if the indent option is provided. --noinput --------- -**New in Django development version** - Inform django-admin that the user should NOT be prompted for any input. Useful if the django-admin script will be executed as an unattended, automated script. @@ -530,8 +500,6 @@ Example output:: --verbosity ----------- -**New in Django development version** - Example usage:: django-admin.py syncdb --verbosity=2 @@ -543,8 +511,6 @@ and `2` is verbose output. --adminmedia ------------ -**New in Django development version** - Example usage:: django-admin.py manage.py --adminmedia=/tmp/new-admin-style/ diff --git a/docs/generic_views.txt b/docs/generic_views.txt index a136c72a07..7659a428c5 100644 --- a/docs/generic_views.txt +++ b/docs/generic_views.txt @@ -97,8 +97,7 @@ which is a dictionary of the parameters captured in the URL. * ``extra_context``: A dictionary of values to add to the template context. By default, this is an empty dictionary. If a value in the dictionary is callable, the generic view will call it - just before rendering the template. (**This is new in the - Django development version.**) + just before rendering the template. **Example:** @@ -752,10 +751,10 @@ If the results are paginated, the context will contain these extra variables: * ``previous``: The previous page number, as an integer. This is 1-based. - * `last_on_page`: **New in Django development version** The number of the + * `last_on_page`: The number of the last result on the current page. This is 1-based. - * `first_on_page`: **New in Django development version** The number of the + * `first_on_page`: The number of the first result on the current page. This is 1-based. * ``pages``: The total number of pages, as an integer. diff --git a/docs/install.txt b/docs/install.txt index 3eede02af0..dbbde93f83 100644 --- a/docs/install.txt +++ b/docs/install.txt @@ -86,25 +86,17 @@ Installing the official version Distribution-provided packages will typically allow for automatic installation of dependancies and easy upgrade paths. - 2. Download Django-0.95.tar.gz from our `download page`_. + 2. Download the latest release from our `download page`_. - 3. ``tar xzvf Django-0.95.tar.gz`` + 3. Untar the downloaded file (e.g. ``tar xzvf Django-NNN.tar.gz``). - 4. ``cd Django-0.95`` + 4. Change into the downloaded directory (e.g. ``cd Django-NNN``). - 5. ``sudo python setup.py install`` - -Note that the last command will automatically download and install setuptools_ -if you don't already have it installed. This requires a working Internet -connection and may cause problems on Python 2.5. If you run into problems, -try using our development version by following the instructions below. The -development version no longer uses setuptools nor requires an Internet -connection. + 5. Run ``sudo python setup.py install``. The command will install Django in your Python installation's ``site-packages`` directory. -.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools .. _distribution specific notes: ../distributions/ Installing the development version diff --git a/docs/middleware.txt b/docs/middleware.txt index 7635442a5c..0d533443d3 100644 --- a/docs/middleware.txt +++ b/docs/middleware.txt @@ -104,8 +104,6 @@ Also removes the content from any response to a HEAD request and sets the django.middleware.http.SetRemoteAddrFromForwardedFor ---------------------------------------------------- -**New in Django development version** - Sets ``request.META['REMOTE_ADDR']`` based on ``request.META['HTTP_X_FORWARDED_FOR']``, if the latter is set. This is useful if you're sitting behind a reverse proxy that causes each request's diff --git a/docs/model-api.txt b/docs/model-api.txt index 26686b02fe..155ef63271 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -362,9 +362,8 @@ Like a ``PositiveIntegerField``, but only allows values under a certain containing only letters, numbers, underscores or hyphens. They're generally used in URLs. -In the Django development version, you can specify ``maxlength``. If -``maxlength`` is not specified, Django will use a default length of 50. In -previous Django versions, there's no way to override the length of 50. +Like a CharField, you can specify ``maxlength``. If ``maxlength`` is +not specified, Django will use a default length of 50. Implies ``db_index=True``. @@ -1457,8 +1456,8 @@ user searches for ``john lennon``, Django will do the equivalent of this SQL WHERE (first_name ILIKE '%john%' OR last_name ILIKE '%john%') AND (first_name ILIKE '%lennon%' OR last_name ILIKE '%lennon%') -**New in Django development version:** For faster and/or more restrictive -searches, prefix the field name with an operator: +For faster and/or more restrictive searches, prefix the field name +with an operator: ``^`` Matches the beginning of the field. For example, if ``search_fields`` is @@ -1754,8 +1753,6 @@ But this template code is good:: The ``permalink`` decorator ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**New in Django development version.** - The problem with the way we wrote ``get_absolute_url()`` above is that it slightly violates the DRY principle: the URL for this object is defined both in the URLConf file and in the model. diff --git a/docs/newforms.txt b/docs/newforms.txt index 33aaf14357..ddb850f54c 100644 --- a/docs/newforms.txt +++ b/docs/newforms.txt @@ -9,9 +9,10 @@ framework. This document explains how to use this new library. Migration plan ============== -``django.newforms`` currently is only available in the Django development version --- i.e., it's not available in the Django 0.95 release. For the next Django -release, our plan is to do the following: +``django.newforms`` currently is only available in Django beginning +with the 0.96 release. the Django development version -- i.e., it's +not available in the Django 0.95 release. For the next Django release, +our plan is to do the following: * As of revision [4208], we've copied the current ``django.forms`` to ``django.oldforms``. This allows you to upgrade your code *now* rather @@ -859,6 +860,16 @@ level and at the form instance level, and the latter gets precedence:: <tr><th>Url:</th><td><input type="text" name="url" /></td></tr> <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr> +Creating custom fields +---------------------- + +If the built-in ``Field`` classes don't meet your needs, you can easily create +custom ``Field`` classes. To do this, just create a subclass of +``django.newforms.Field``. Its only requirements are that it implement a +``clean()`` method and that its ``__init__()`` method accept the core arguments +mentioned above (``required``, ``label``, ``initial``, ``widget``, +``help_text``). + More coming soon ================ diff --git a/docs/release_notes_0.96.txt b/docs/release_notes_0.96.txt new file mode 100644 index 0000000000..ca5f5e045c --- /dev/null +++ b/docs/release_notes_0.96.txt @@ -0,0 +1,264 @@ +================================= +Django version 0.96 release notes +================================= + +Welcome to Django 0.96! + +The primary goal for 0.96 is a cleanup and stabilization of the features +introduced in 0.95. There have been a few small `backwards-incompatible +changes`_ since 0.95, but the upgrade process should be fairly simple +and should not require major changes to existing applications. + +However, we're also releasing 0.96 now because we have a set of +backwards-incompatible changes scheduled for the near future. Once +completed, they will involve some code changes for application +developers, so we recommend that you stick with Django 0.96 until the +next official release; then you'll be able to upgrade in one step +instead of needing to make incremental changes to keep up with the +development version of Django. + +Backwards-incompatible changes +============================== + +The following changes may require you to update your code when you switch from +0.95 to 0.96: + +``MySQLdb`` version requirement +------------------------------- + +Due to a bug in older versions of the ``MySQLdb`` Python module (which +Django uses to connect to MySQL databases), Django's MySQL backend now +requires version 1.2.1p2 or higher of `MySQLdb`, and will raise +exceptions if you attempt to use an older version. + +If you're currently unable to upgrade your copy of ``MySQLdb`` to meet +this requirement, a separate, backwards-compatible backend, called +"mysql_old", has been added to Django. To use this backend, change +the ``DATABASE_ENGINE`` setting in your Django settings file from +this:: + + DATABASE_ENGINE = "mysql" + +to this:: + + DATABASE_ENGINE = "mysql_old" + +However, we strongly encourage MySQL users to upgrade to a more recent +version of `MySQLdb` as soon as possible, The "mysql_old" backend is +provided only to ease this transition, and is considered deprecated; +aside from any necessary security fixes, it will not be actively +maintained, and it will be removed in a future release of Django. + +Also, note that some features, like the new ``DATABASE_OPTIONS`` +setting (see the `databases documentation`_ for details), are only +available on the "mysql" backend, and will not be made available for +"mysql_old". + +.. _databases documentation: ../databases/ + +Database constraint names changed +--------------------------------- + +The format of the constraint names Django generates for foreign key +references have changed slightly. These names are generally only used +when it is not possible to put the reference directly on the affected +column, so they is not always visible. + +The effect of this change is that running ``manage.py reset`` and +similar commands against an existing database may generate SQL with +the new form of constraint name, while the database itself contains +constraints named in the old form; this will cause the database server +to raise an error message about modifying non-existent constraints. + +If you need to work around this, there are two methods available: + + 1. Redirect the output of ``manage.py`` to a file, and edit the + generated SQL to use the correct constraint names before + executing it. + + 2. Examine the output of ``manage.py sqlall`` to see the new-style + constraint names, and use that as a guide to rename existing + constraints in your database. + +Name changes in ``manage.py`` +----------------------------- + +A few of the options to ``manage.py`` have changed with the addition of fixture +support: + + * There are new ``dumpdata`` and ``loaddata`` commands which, as + you might expect, will dump and load data to/from the + database. These commands can operate against any of Django's + supported serialization formats. + + * The ``sqlinitialdata`` command has been renamed to ``sqlcustom`` to + emphasize that ``loaddata`` should be used for data (and ``sqlcustom`` for + other custom SQL -- views, stored procedures, etc.). + + * The vestigial ``install`` command has been removed. Use ``syncdb``. + +Backslash escaping changed +-------------------------- + +The Django database API now escapes backslashes given as query parameters. If +you have any database API code that matches backslashes, and it was working before +(despite the lack of escaping), you'll have to change your code to "unescape" the +slashes one level. + +For example, this used to work:: + + # Find text containing a single backslash + MyModel.objects.filter(text__contains='\\\\') + +The above is now incorrect, and should be rewritten as:: + + # Find text containing a single backslash + MyModel.objects.filter(text__contains='\\') + +Removed ENABLE_PSYCO setting +---------------------------- + +The ``ENABLE_PSYCO`` setting no longer exists. If your settings file includes +``ENABLE_PSYCO`` it will have no effect; to use Psyco_, we recommend +writing a middleware class to activate it. + +.. _psyco: http://psyco.sourceforge.net/ + +What's new in 0.96? +=================== + +This revision represents over a thousand source commits and over four hundred +bug fixes, so we can't possibly catalog all the changes. Here, we describe the +most notable changes in this release. + +New forms library +----------------- + +``django.newforms`` is Django's new form-handling library. It's a +replacement for ``django.forms``, the old form/manipulator/validation +framework. Both APIs are available in 0.96, but over the next two +releases we plan to switch completely to the new forms system, and +deprecate and remove the old system. + +There are three elements to this transition: + + * We've copied the current ``django.forms`` to + ``django.oldforms``. This allows you to upgrade your code *now* + rather than waiting for the backwards-incompatible change and + rushing to fix your code after the fact. Just change your + import statements like this:: + + from django import forms # 0.95-style + from django import oldforms as forms # 0.96-style + + * The next official release of Django will move the current + ``django.newforms`` to ``django.forms``. This will be a + backwards-incompatible change, and anyone still using the old + version of ``django.forms`` at that time will need to change + their import statements as described above. + + * The next release after that will completely remove + ``django.oldforms``. + +Although the ``newforms`` library will continue to evolve, it's ready for use +for most common cases. We recommend that anyone new to form handling skip the +old forms system and start with the new. + +For more information about ``django.newforms``, read the `newforms +documentation`_. + +.. _newforms documentation: ../newforms/ + +URLconf improvements +-------------------- + +You can now use any callable as the callback in URLconfs (previously, only +strings that referred to callables were allowed). This allows a much more +natural use of URLconfs. For example, this URLconf:: + + from django.conf.urls.defaults import * + + urlpatterns = patterns('', + ('^myview/$', 'mysite.myapp.views.myview') + ) + +can now be rewritten as:: + + from django.conf.urls.defaults import * + from mysite.myapp.views import myview + + urlpatterns = patterns('', + ('^myview/$', myview) + ) + +One useful application of this can be seen when using decorators; this +change allows you to apply decorators to views *in your +URLconf*. Thus, you can make a generic view require login very +easily:: + + from django.conf.urls.defaults import * + from django.contrib.auth.decorators import login_required + from django.views.generic.list_detail import object_list + from mysite.myapp.models import MyModel + + info = { + "queryset" : MyModel.objects.all(), + } + + urlpatterns = patterns('', + ('^myview/$', login_required(object_list), info) + ) + +Note that both syntaxes (strings and callables) are valid, and will continue to +be valid for the foreseeable future. + +The test framework +------------------ + +Django now includes a test framework so you can start transmuting fear into +boredom (with apologies to Kent Beck). You can write tests based on doctest_ +or unittest_ and test your views with a simple test client. + +There is also new support for "fixtures" -- initial data, stored in any of the +supported `serialization formats`_, that will be loaded into your database at the +start of your tests. This makes testing with real data much easier. + +See `the testing documentation`_ for the full details. + +.. _doctest: http://docs.python.org/lib/module-doctest.html +.. _unittest: http://docs.python.org/lib/module-unittest.html +.. _the testing documentation: ../testing/ +.. _serialization formats: ../serialization/ + +Improvements to the admin interface +----------------------------------- + +A small change, but a very nice one: dedicated views for adding and +updating users have been added to the admin interface, so you no +longer need to worry about working with hashed passwords in the admin. + +Thanks +====== + +Since 0.95, a number of people have stepped forward and taken a major +new role in Django's development. We'd like to thank these people for +all their hard work: + + * Russell Keith-Magee and Malcolm Tredinnick for their major code + contributions. This release wouldn't have been possible without them. + + * Our new release manager, James Bennett, for his work in getting out + 0.95.1, 0.96, and (hopefully) future release. + + * Our ticket managers Chris Beaven (aka SmileyChris), Simon Greenhill, + Michael Radziej, and Gary Wilson. They agreed to take on the monumental + task of wrangling our tickets into nicely cataloged submission. Figuring + out what to work on is now about a million times easier; thanks again, + guys. + + * Everyone who submitted a bug report, patch or ticket comment. We can't + possibly thank everyone by name -- over 200 developers submitted patches + that went into 0.96 -- but everyone who's contributed to Django is listed + in AUTHORS_. + +.. _AUTHORS: http://code.djangoproject.com/browser/django/trunk/AUTHORS
\ No newline at end of file diff --git a/docs/request_response.txt b/docs/request_response.txt index 6dfe78a686..2b79903d13 100644 --- a/docs/request_response.txt +++ b/docs/request_response.txt @@ -384,7 +384,6 @@ Methods Deletes the cookie with the given key. Fails silently if the key doesn't exist. - The ``path`` and ``domain`` arguments are new in the Django development version. Due to the way cookies work, ``path`` and ``domain`` should be the same values you used in ``set_cookie()`` -- otherwise the cookie may not be deleted. diff --git a/docs/serialization.txt b/docs/serialization.txt index aee1b9a3bb..48ab46f0f9 100644 --- a/docs/serialization.txt +++ b/docs/serialization.txt @@ -31,7 +31,8 @@ but it'll almost always be a QuerySet). You can also use a serializer object directly:: - xml_serializer = serializers.get_serializer("xml") + XMLSerializer = serializers.get_serializer("xml") + xml_serializer = XMLSerializer() xml_serializer.serialize(queryset) data = xml_serializer.getvalue() diff --git a/docs/sessions.txt b/docs/sessions.txt index 8c54c1634a..660718b4e2 100644 --- a/docs/sessions.txt +++ b/docs/sessions.txt @@ -265,8 +265,6 @@ The name of the cookie to use for sessions. This can be whatever you want. SESSION_COOKIE_SECURE --------------------- -**New in Django development version** - Default: ``False`` Whether to use a secure cookie for the session cookie. If this is set to diff --git a/docs/settings.txt b/docs/settings.txt index b41281ee49..63b5cceef9 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -245,7 +245,8 @@ DATABASE_ENGINE Default: ``''`` (Empty string) Which database backend to use. Either ``'postgresql_psycopg2'``, -``'postgresql'``, ``'mysql'``, ``'sqlite3'`` or ``'ado_mssql'``. +``'postgresql'``, ``'mysql'``, ``'mysql_old'``, ``'sqlite3'`` or +``'ado_mssql'``. DATABASE_HOST ------------- @@ -428,8 +429,6 @@ trailing space. FIXTURE_DIRS ------------- -**New in Django development version** - Default: ``()`` (Empty tuple) List of locations of the fixture data files, in search order. Note that @@ -715,8 +714,6 @@ See the `session docs`_. SESSION_COOKIE_SECURE --------------------- -**New in Django development version** - Default: ``False`` Whether to use a secure cookie for the session cookie. If this is set to @@ -811,8 +808,6 @@ misspelled) variables. See `How invalid variables are handled`_. TEST_RUNNER ----------- -**New in Django development version** - Default: ``'django.test.simple.run_tests'`` The name of the method to use for starting the test suite. See @@ -823,8 +818,6 @@ The name of the method to use for starting the test suite. See TEST_DATABASE_NAME ------------------ -**New in Django development version** - Default: ``None`` The name of database to use when running the test suite. If a value of diff --git a/docs/templates.txt b/docs/templates.txt index d53270ac16..db748ae432 100644 --- a/docs/templates.txt +++ b/docs/templates.txt @@ -112,8 +112,6 @@ know how to write Python code. Comments ======== -**New in Django development version** - To comment-out part of a template, use the comment syntax: ``{# #}``. For example, this template would render as ``'hello'``:: @@ -253,8 +251,8 @@ Here are some tips for working with inheritance: if you want to add to the contents of a parent block instead of completely overriding it. - * **New in Django development version:** For extra readability, you can - optionally give a *name* to your ``{% endblock %}`` tag. For example:: + * For extra readability, you can optionally give a *name* to your + ``{% endblock %}`` tag. For example:: {% block content %} ... @@ -548,9 +546,9 @@ The 'ifchanged' block tag is used within a loop. It has two possible uses. <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a> {% endfor %} -2. **New in Django development version.** If given a variable, check whether that - variable has changed. For example, the following shows the date every time it - changes, but only shows the hour if both the hour and the date has changed:: +2. If given a variable, check whether that variable has changed. For + example, the following shows the date every time it changes, but + only shows the hour if both the hour and the date has changed:: {% for date in days %} {% ifchanged date.date %} {{ date.date }} {% endifchanged %} @@ -828,13 +826,9 @@ The argument tells which template bit to output: ``closecomment`` ``#}`` ================== ======= -Note: ``opencomment`` and ``closecomment`` are new in the Django development version. - url ~~~ -**New in Django development version** - **Note that the syntax for this tag may change in the future, as we make it more robust.** Returns an absolute URL (i.e., a URL without the domain name) matching a given @@ -976,8 +970,6 @@ place -- but only if there's a decimal part to be displayed. For example: * ``36.15`` gets converted to ``36.2`` * ``36`` gets converted to ``36`` -**New in Django development version** - If used with a numeric integer argument, ``floatformat`` rounds a number to that many decimal places. For example: diff --git a/docs/testing.txt b/docs/testing.txt index f7fd402502..31cea791d3 100644 --- a/docs/testing.txt +++ b/docs/testing.txt @@ -2,8 +2,6 @@ Testing Django applications =========================== -**New in Django development version**. - Automated testing is an extremely useful weapon in the bug-killing arsenal of the modern developer. When initially writing code, a test suite can be used to validate that code behaves as expected. When refactoring or @@ -227,6 +225,12 @@ can be invoked on the ``Client`` instance. The key-value pairs in the data dictionary will be encoded as a multipart message and used to create the POST data payload. + To submit multiple values for a given key (for example, to specify + the selections for a multiple selection list), provide the values as a + list or tuple for the required key. For example, a data dictionary of + ``{'choices': ('a','b','d')}`` would submit three selected rows for the + field named ``choices``. + Submitting files is a special case. To POST a file, you need only provide the file field name as a key, and a file handle to the file you wish to upload as a value. The Test Client will populate the two POST fields (i.e., diff --git a/docs/url_dispatch.txt b/docs/url_dispatch.txt index 3f51ce4b91..85c87de680 100644 --- a/docs/url_dispatch.txt +++ b/docs/url_dispatch.txt @@ -400,8 +400,6 @@ to pass metadata and options to views. Passing extra options to ``include()`` -------------------------------------- -**New in Django development version.** - Similarly, you can pass extra options to ``include()``. When you pass extra options to ``include()``, *each* line in the included URLconf will be passed the extra options. @@ -442,8 +440,6 @@ every view in the the included URLconf accepts the extra options you're passing. Passing callable objects instead of strings =========================================== -**New in Django development version.** - Some developers find it more natural to pass the actual Python function object rather than a string containing the path to its module. This alternative is supported -- you can pass any callable object as the view. |
