summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2007-09-15 21:21:37 +0000
committerAdrian Holovaty <adrian@holovaty.com>2007-09-15 21:21:37 +0000
commitfb6a0c8ffa1cd74c63aaf4b011665e5952d449e7 (patch)
tree4af2f7d6a2d1d91adf80243c67176effecf0c8b8 /docs
parentc8f6e485b8b7329418ca030421b9bde4ec164854 (diff)
queryset-refactor: Merged to [6155]
git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@6332 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'docs')
-rw-r--r--docs/generic_views.txt27
-rw-r--r--docs/newforms.txt34
-rw-r--r--docs/request_response.txt3
-rw-r--r--docs/sites.txt3
-rw-r--r--docs/templates.txt25
-rw-r--r--docs/templates_python.txt32
-rw-r--r--docs/testing.txt8
7 files changed, 103 insertions, 29 deletions
diff --git a/docs/generic_views.txt b/docs/generic_views.txt
index 0601aead11..33c39b7e12 100644
--- a/docs/generic_views.txt
+++ b/docs/generic_views.txt
@@ -688,9 +688,8 @@ A page representing a list of objects.
* ``paginate_by``: An integer specifying how many objects should be
displayed per page. If this is given, the view will paginate objects with
``paginate_by`` objects per page. The view will expect either a ``page``
- query string parameter (via ``GET``) containing a 1-based page
- number, or a ``page`` variable specified in the URLconf. See
- "Notes on pagination" below.
+ query string parameter (via ``GET``) or a ``page`` variable specified in
+ the URLconf. See "Notes on pagination" below.
* ``template_name``: The full name of a template to use in rendering the
page. This lets you override the default template name (see below).
@@ -765,6 +764,9 @@ If the results are paginated, the context will contain these extra variables:
* ``hits``: The total number of objects across *all* pages, not just this
page.
+ * ``page_range``: A list of the page numbers that are available. This
+ is 1-based.
+
Notes on pagination
~~~~~~~~~~~~~~~~~~~
@@ -777,12 +779,25 @@ specify the page number in the URL in one of two ways:
(r'^objects/page(?P<page>[0-9]+)/$', 'object_list', dict(info_dict))
* Pass the page number via the ``page`` query-string parameter. For
- example, a URL would look like this:
+ example, a URL would look like this::
/objects/?page=3
-In both cases, ``page`` is 1-based, not 0-based, so the first page would be
-represented as page ``1``.
+ * To loop over all the available page numbers, use the ``page_range``
+ variable. You can iterate over the list provided by ``page_range``
+ to create a link to every page of results.
+
+These values and lists are is 1-based, not 0-based, so the first page would be
+represented as page ``1``. As a special case, you are also permitted to use
+``last`` as a value for ``page``::
+
+ /objects/?page=last
+
+This allows you to access the final page of results without first having to
+determine how many pages there are.
+
+Note that ``page`` *must* be either a valid page number or the value ``last``;
+any other value for ``page`` will result in a 404 error.
``django.views.generic.list_detail.object_detail``
--------------------------------------------------
diff --git a/docs/newforms.txt b/docs/newforms.txt
index 32c4441eb2..10fa15a1c4 100644
--- a/docs/newforms.txt
+++ b/docs/newforms.txt
@@ -554,6 +554,29 @@ method you're using::
<p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p>
<p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p>
+Customizing the error list format
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+By default, forms use ``django.newforms.util.ErrorList`` to format validation
+errors. If you'd like to use an alternate class for displaying errors, you can
+pass that in at construction time::
+
+ >>> from django.newforms.util import ErrorList
+ >>> class DivErrorList(ErrorList):
+ ... def __unicode__(self):
+ ... return self.as_divs()
+ ... def as_divs(self):
+ ... if not self: return u''
+ ... return u'<div class="errorlist">%s</div>' % ''.join([u'<div class="error">%s</div>' % e for e in self])
+ >>> f = ContactForm(data, auto_id=False, error_class=DivErrorList)
+ >>> f.as_p()
+ <div class="errorlist"><div class="error">This field is required.</div></div>
+ <p>Subject: <input type="text" name="subject" maxlength="100" /></p>
+ <p>Message: <input type="text" name="message" value="Hi there" /></p>
+ <div class="errorlist"><div class="error">Enter a valid e-mail address.</div></div>
+ <p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p>
+ <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p>
+
More granular output
~~~~~~~~~~~~~~~~~~~~
@@ -1893,6 +1916,17 @@ Note that your callback needs to handle *all* possible model field types, not
just the ones that you want to behave differently to the default. That's why
this example has an ``else`` clause that implements the default behavior.
+.. warning::
+ The field that is passed into the ``formfield_callback`` function in
+ ``form_for_model()`` and ``form_for_instance`` is the field instance from
+ your model's class. You **must not** alter that object at all; treat it
+ as read-only!
+
+ If you make any alterations to that object, it will affect any future
+ users of the model class, because you will have changed the field object
+ used to construct the class. This is almost certainly what you don't want
+ to have happen.
+
Finding the model associated with a form
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/request_response.txt b/docs/request_response.txt
index 867464226a..1eef41659a 100644
--- a/docs/request_response.txt
+++ b/docs/request_response.txt
@@ -183,6 +183,9 @@ subclass of dictionary. Exceptions are outlined here:
* ``__getitem__(key)`` -- Returns the value for the given key. If the key
has more than one value, ``__getitem__()`` returns the last value.
+ Raises ``django.utils.datastructure.MultiValueDictKeyError`` if the key
+ does not exist (fortunately, this is a subclass of Python's standard
+ ``KeyError``, so you can stick to catching ``KeyError``).
* ``__setitem__(key, value)`` -- Sets the given key to ``[value]``
(a Python list whose single element is ``value``). Note that this, as
diff --git a/docs/sites.txt b/docs/sites.txt
index 90a9d0f90f..e7a8ecbfa6 100644
--- a/docs/sites.txt
+++ b/docs/sites.txt
@@ -316,6 +316,9 @@ Here's how Django uses the sites framework:
* The shortcut view (``django.views.defaults.shortcut``) uses the domain of
the current ``Site`` object when calculating an object's URL.
+ * In the admin framework, the ''view on site'' link uses the current
+ ``Site`` to work out the domain for the site that it will redirect to.
+
.. _redirects framework: ../redirects/
.. _flatpages framework: ../flatpages/
.. _syndication framework: ../syndication_feeds/
diff --git a/docs/templates.txt b/docs/templates.txt
index 9f2bec1c8b..ff67579b87 100644
--- a/docs/templates.txt
+++ b/docs/templates.txt
@@ -366,25 +366,36 @@ Ignore everything between ``{% comment %}`` and ``{% endcomment %}``
cycle
~~~~~
-Cycle among the given strings each time this tag is encountered.
+**Changed in Django development version**
+Cycle among the given strings or variables each time this tag is encountered.
-Within a loop, cycles among the given strings each time through the loop::
+Within a loop, cycles among the given strings/variables each time through the
+loop::
{% for o in some_list %}
- <tr class="{% cycle row1,row2 %}">
+ <tr class="{% cycle 'row1' 'row2' rowvar %}">
...
</tr>
{% endfor %}
-
+
Outside of a loop, give the values a unique name the first time you call it,
then use that name each successive time through::
- <tr class="{% cycle row1,row2,row3 as rowcolors %}">...</tr>
+ <tr class="{% cycle 'row1' 'row2' rowvar as rowcolors %}">...</tr>
<tr class="{% cycle rowcolors %}">...</tr>
<tr class="{% cycle rowcolors %}">...</tr>
-You can use any number of values, separated by commas. Make sure not to put
-spaces between the values -- only commas.
+You can use any number of values, separated by spaces. Values enclosed in
+single (') or double quotes (") are treated as string literals, while values
+without quotes are assumed to refer to context variables.
+
+You can also separate values with commas::
+
+ {% cycle row1,row2,row3 %}
+
+In this syntax, each value will be interpreted as literal text. The
+comma-based syntax exists for backwards-compatibility, and should not be
+used for new projects.
debug
~~~~~
diff --git a/docs/templates_python.txt b/docs/templates_python.txt
index 261eaedf74..150aa70fdf 100644
--- a/docs/templates_python.txt
+++ b/docs/templates_python.txt
@@ -642,7 +642,23 @@ your function. Example::
"Converts a string into all lowercase"
return value.lower()
-When you've written your filter definition, you need to register it with
+Template filters which expect strings
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you're writing a template filter which only expects a string as the first
+argument, you should use the included decorator ``stringfilter``. This will
+convert an object to it's string value before being passed to your function::
+
+ from django.template.defaultfilters import stringfilter
+
+ @stringfilter
+ def lower(value):
+ return value.lower()
+
+Registering a custom filters
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Once you've written your filter definition, you need to register it with
your ``Library`` instance, to make it available to Django's template language::
register.filter('cut', cut)
@@ -658,28 +674,18 @@ If you're using Python 2.4 or above, you can use ``register.filter()`` as a
decorator instead::
@register.filter(name='cut')
+ @stringfilter
def cut(value, arg):
return value.replace(arg, '')
@register.filter
+ @stringfilter
def lower(value):
return value.lower()
If you leave off the ``name`` argument, as in the second example above, Django
will use the function's name as the filter name.
-Template filters which expect strings
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-If you are writing a template filter which only expects a string as the first
-argument, you should use the included decorator ``stringfilter`` which will convert
-an object to it's string value before being passed to your function::
-
- from django.template.defaultfilters import stringfilter
-
- @stringfilter
- def lower(value):
- return value.lower()
-
Writing custom template tags
----------------------------
diff --git a/docs/testing.txt b/docs/testing.txt
index 22a7e48a7a..e15abd50d5 100644
--- a/docs/testing.txt
+++ b/docs/testing.txt
@@ -569,8 +569,8 @@ Testing responses
The ``get()`` and ``post()`` methods both return a ``Response`` object. This
``Response`` object is *not* the same as the ``HttpResponse`` object returned
-Django views; this object is simpler and has some additional data useful for
-tests.
+Django views; the test response object has some additional data useful for
+test code to verify.
Specifically, a ``Response`` object has the following attributes:
@@ -582,7 +582,7 @@ Specifically, a ``Response`` object has the following attributes:
``content`` The body of the response, as a string. This is the final
page content as rendered by the view, or any error
- message (such as the URL for a 302 redirect).
+ message.
``context`` The template ``Context`` instance that was used to render
the template that produced the response content.
@@ -591,6 +591,8 @@ Specifically, a ``Response`` object has the following attributes:
``context`` will be a list of ``Context``
objects, in the order in which they were rendered.
+ ``headers`` The HTTP headers of the response. This is a dictionary.
+
``request`` The request data that stimulated the response.
``status_code`` The HTTP status of the response, as an integer. See