summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2007-09-15 21:57:25 +0000
committerAdrian Holovaty <adrian@holovaty.com>2007-09-15 21:57:25 +0000
commitca33d307dee3cf68cc9cd2ccfae00c7ff23ea890 (patch)
treee0f0afa392f4ab50de4a89e2a0b1b4cc53f40794 /docs
parent7325fbf4ff20f9b0f21d3a1aba1abaca78a765d7 (diff)
queryset-refactor: Merged to [6300]
git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@6340 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'docs')
-rw-r--r--docs/authentication.txt9
-rw-r--r--docs/contributing.txt29
-rw-r--r--docs/databases.txt2
-rw-r--r--docs/db-api.txt3
-rw-r--r--docs/fastcgi.txt5
-rw-r--r--docs/generic_views.txt7
-rw-r--r--docs/i18n.txt142
-rw-r--r--docs/install.txt11
-rw-r--r--docs/newforms.txt21
-rw-r--r--docs/templates.txt6
-rw-r--r--docs/testing.txt14
-rw-r--r--docs/tutorial01.txt2
12 files changed, 160 insertions, 91 deletions
diff --git a/docs/authentication.txt b/docs/authentication.txt
index 820aff2712..713e86c140 100644
--- a/docs/authentication.txt
+++ b/docs/authentication.txt
@@ -244,6 +244,9 @@ Anonymous users
the ``django.contrib.auth.models.User`` interface, with these differences:
* ``id`` is always ``None``.
+ * ``is_staff`` and ``is_superuser`` are always False.
+ * ``is_active`` is always True.
+ * ``groups`` and ``user_permissions`` are always empty.
* ``is_anonymous()`` returns ``True`` instead of ``False``.
* ``is_authenticated()`` returns ``False`` instead of ``True``.
* ``has_perm()`` always returns ``False``.
@@ -992,10 +995,10 @@ Writing an authentication backend
---------------------------------
An authentication backend is a class that implements two methods:
-``get_user(id)`` and ``authenticate(**credentials)``.
+``get_user(user_id)`` and ``authenticate(**credentials)``.
-The ``get_user`` method takes an ``id`` -- which could be a username, database
-ID or whatever -- and returns a ``User`` object.
+The ``get_user`` method takes a ``user_id`` -- which could be a username,
+database ID or whatever -- and returns a ``User`` object.
The ``authenticate`` method takes credentials as keyword arguments. Most of
the time, it'll just look like this::
diff --git a/docs/contributing.txt b/docs/contributing.txt
index c87eef1fdf..3200a87012 100644
--- a/docs/contributing.txt
+++ b/docs/contributing.txt
@@ -654,10 +654,31 @@ info, with the ``DATABASE_ENGINE`` setting. You will also need a ``ROOT_URLCONF`
setting (its value is ignored; it just needs to be present) and a ``SITE_ID``
setting (any non-zero integer value will do) in order for all the tests to pass.
-The unit tests will not touch your existing databases; they create a new
-database, called ``django_test_db``, which is deleted when the tests are
-finished. This means your user account needs permission to execute ``CREATE
-DATABASE``.
+If you're using the ``sqlite3`` database backend, no further settings are
+needed. A temporary database will be created in memory when running the tests.
+
+If you're using another backend:
+
+ * Your ``DATABASE_USER`` setting needs to specify an existing user account
+ for the database engine.
+
+ * The ``DATABASE_NAME`` setting must be the name of an existing database to
+ which the given user has permission to connect. The unit tests will not
+ touch this database; the test runner creates a new database whose name is
+ ``DATABASE_NAME`` prefixed with ``test_``, and this test database is
+ deleted when the tests are finished. This means your user account needs
+ permission to execute ``CREATE DATABASE``.
+
+To run a subset of the unit tests, append the names of the test modules to the
+``runtests.py`` command line. See the list of directories in
+``tests/modeltests`` and ``tests/regressiontests`` for module names.
+
+As an example, if Django is not in your ``PYTHONPATH``, you placed
+``settings.py`` in the ``tests/`` directory, and you'd like to only run tests
+for generic relations and internationalization, type::
+
+ PYTHONPATH=..
+ ./runtests.py --settings=settings generic_relations i18n
Requesting features
===================
diff --git a/docs/databases.txt b/docs/databases.txt
index ed0cb61bc3..21ff4c7434 100644
--- a/docs/databases.txt
+++ b/docs/databases.txt
@@ -117,7 +117,7 @@ Here's a sample configuration which uses a MySQL option file::
[client]
database = DATABASE_NAME
user = DATABASE_USER
- passwd = DATABASE_PASSWORD
+ password = DATABASE_PASSWORD
default-character-set = utf8
Several other MySQLdb connection options may be useful, such as ``ssl``,
diff --git a/docs/db-api.txt b/docs/db-api.txt
index 2a1f428ae7..cc235b79ed 100644
--- a/docs/db-api.txt
+++ b/docs/db-api.txt
@@ -511,6 +511,9 @@ like so::
Entry.objects.order_by('?')
+Note: ``order_by('?')`` queries may be expensive and slow, depending on the
+database backend you're using.
+
To order by a field in a different table, add the other table's name and a dot,
like so::
diff --git a/docs/fastcgi.txt b/docs/fastcgi.txt
index e50b9323bf..78ee9d408c 100644
--- a/docs/fastcgi.txt
+++ b/docs/fastcgi.txt
@@ -46,9 +46,8 @@ Prerequisite: flup
==================
Before you can start using FastCGI with Django, you'll need to install flup_,
-which is a Python library for dealing with FastCGI. Make sure to use the latest
-Subversion snapshot of flup, as some users have reported stalled pages with
-older flup versions.
+which is a Python library for dealing with FastCGI. Version 0.5 or newer should
+work fine.
.. _flup: http://www.saddi.com/software/flup/
diff --git a/docs/generic_views.txt b/docs/generic_views.txt
index a00a49d8be..87b82f7adf 100644
--- a/docs/generic_views.txt
+++ b/docs/generic_views.txt
@@ -699,7 +699,10 @@ A page representing a list of objects.
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``) or a ``page`` variable specified in
- the URLconf. See "Notes on pagination" below.
+ the URLconf. See `Notes on pagination`_ below.
+
+ * ``page``: The current page number, as an integer. This is 1-based.
+ 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).
@@ -775,7 +778,7 @@ If the results are paginated, the context will contain these extra variables:
page.
* **New in Django development version:** ``page_range``: A list of the
- page numbers that are available. This is 1-based.
+ page numbers that are available. This is 1-based.
Notes on pagination
~~~~~~~~~~~~~~~~~~~
diff --git a/docs/i18n.txt b/docs/i18n.txt
index 38252edeb1..25191e9402 100644
--- a/docs/i18n.txt
+++ b/docs/i18n.txt
@@ -27,21 +27,8 @@ Essentially, Django does two things:
* It uses these hooks to translate Web apps for particular users according
to their language preferences.
-How to internationalize your app: in three steps
-------------------------------------------------
-
- 1. Embed translation strings in your Python code and templates.
- 2. Get translations for those strings, in whichever languages you want to
- support.
- 3. Activate the locale middleware in your Django settings.
-
-.. admonition:: Behind the scenes
-
- Django's translation machinery uses the standard ``gettext`` module that
- comes with Python.
-
-If you don't need internationalization
-======================================
+If you don't need internationalization in your app
+==================================================
Django's internationalization hooks are on by default, and that means there's a
bit of i18n-related overhead in certain places of the framework. If you don't
@@ -55,8 +42,21 @@ from your ``TEMPLATE_CONTEXT_PROCESSORS`` setting.
.. _documentation for USE_I18N: ../settings/#use-i18n
-How to specify translation strings
-==================================
+If you do need internationalization: three steps
+================================================
+
+ 1. Embed translation strings in your Python code and templates.
+ 2. Get translations for those strings, in whichever languages you want to
+ support.
+ 3. Activate the locale middleware in your Django settings.
+
+.. admonition:: Behind the scenes
+
+ Django's translation machinery uses the standard ``gettext`` module that
+ comes with Python.
+
+1. How to specify translation strings
+=====================================
Translation strings specify "This text should be translated." These strings can
appear in your Python code and templates. It's your responsibility to mark
@@ -295,7 +295,7 @@ string, so they don't need to be aware of translations.
.. _Django templates: ../templates_python/
Working with lazy translation objects
-=====================================
+-------------------------------------
Using ``ugettext_lazy()`` and ``ungettext_lazy()`` to mark strings in models
and utility functions is a common operation. When you're working with these
@@ -305,7 +305,7 @@ convert them to strings, because they should be converted as late as possible
couple of helper functions.
Joining strings: string_concat()
---------------------------------
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Standard Python string joins (``''.join([...])``) will not work on lists
containing lazy translation objects. Instead, you can use
@@ -324,7 +324,7 @@ strings when ``result`` itself is used in a string (usually at template
rendering time).
The allow_lazy() decorator
---------------------------
+~~~~~~~~~~~~~~~~~~~~~~~~~~
Django offers many utility functions (particularly in ``django.utils``) that
take a string as their first argument and do something to that string. These
@@ -359,8 +359,8 @@ Using this decorator means you can write your function and assume that the
input is a proper string, then add support for lazy translation objects at the
end.
-How to create language files
-============================
+2. How to create language files
+===============================
Once you've tagged your strings for later translation, you need to write (or
obtain) the language translations themselves. Here's how that works.
@@ -393,7 +393,7 @@ To create or update a message file, run this command::
...where ``de`` is the language code for the message file you want to create.
The language code, in this case, is in locale format. For example, it's
-``pt_BR`` for Brazilian Portugese and ``de_AT`` for Austrian German.
+``pt_BR`` for Brazilian Portuguese and ``de_AT`` for Austrian German.
The script should be run from one of three places:
@@ -490,8 +490,8 @@ That's it. Your translations are ready for use.
.. _Submitting and maintaining translations: ../contributing/
-How Django discovers language preference
-========================================
+3. How Django discovers language preference
+===========================================
Once you've prepared your translations -- or, if you just want to use the
translations that come with Django -- you'll just need to activate translation
@@ -546,7 +546,7 @@ following this algorithm:
Notes:
* In each of these places, the language preference is expected to be in the
- standard language format, as a string. For example, Brazilian Portugese
+ standard language format, as a string. For example, Brazilian Portuguese
is ``pt-br``.
* If a base language is available but the sublanguage specified is not,
Django uses the base language. For example, if a user specifies ``de-at``
@@ -629,44 +629,6 @@ in ``request.LANGUAGE_CODE``.
.. _session: ../sessions/
.. _request object: ../request_response/#httprequest-objects
-The ``set_language`` redirect view
-==================================
-
-As a convenience, Django comes with a view, ``django.views.i18n.set_language``,
-that sets a user's language preference and redirects back to the previous page.
-
-Activate this view by adding the following line to your URLconf::
-
- (r'^i18n/', include('django.conf.urls.i18n')),
-
-(Note that this example makes the view available at ``/i18n/setlang/``.)
-
-The view expects to be called via the ``GET`` method, with a ``language``
-parameter set in the query string. If session support is enabled, the view
-saves the language choice in the user's session. Otherwise, it saves the
-language choice in a ``django_language`` cookie.
-
-After setting the language choice, Django redirects the user, following this
-algorithm:
-
- * Django looks for a ``next`` parameter in the query string.
- * If that doesn't exist, or is empty, Django tries the URL in the
- ``Referer`` header.
- * If that's empty -- say, if a user's browser suppresses that header --
- then the user will be redirected to ``/`` (the site root) as a fallback.
-
-Here's example HTML template code::
-
- <form action="/i18n/setlang/" method="get">
- <input name="next" type="hidden" value="/next/page/" />
- <select name="language">
- {% for lang in LANGUAGES %}
- <option value="{{ lang.0 }}">{{ lang.1 }}</option>
- {% endfor %}
- </select>
- <input type="submit" value="Go" />
- </form>
-
Using translations in your own projects
=======================================
@@ -728,6 +690,44 @@ The easiest way out is to store applications that are not part of the project
connected to your explicit project and not strings that are distributed
independently.
+The ``set_language`` redirect view
+==================================
+
+As a convenience, Django comes with a view, ``django.views.i18n.set_language``,
+that sets a user's language preference and redirects back to the previous page.
+
+Activate this view by adding the following line to your URLconf::
+
+ (r'^i18n/', include('django.conf.urls.i18n')),
+
+(Note that this example makes the view available at ``/i18n/setlang/``.)
+
+The view expects to be called via the ``POST`` method, with a ``language``
+parameter set in request. If session support is enabled, the view
+saves the language choice in the user's session. Otherwise, it saves the
+language choice in a ``django_language`` cookie.
+
+After setting the language choice, Django redirects the user, following this
+algorithm:
+
+ * Django looks for a ``next`` parameter in ``POST`` request.
+ * If that doesn't exist, or is empty, Django tries the URL in the
+ ``Referrer`` header.
+ * If that's empty -- say, if a user's browser suppresses that header --
+ then the user will be redirected to ``/`` (the site root) as a fallback.
+
+Here's example HTML template code::
+
+ <form action="/i18n/setlang/" method="post">
+ <input name="next" type="hidden" value="/next/page/" />
+ <select name="language">
+ {% for lang in LANGUAGES %}
+ <option value="{{ lang.0 }}">{{ lang.1 }}</option>
+ {% endfor %}
+ </select>
+ <input type="submit" value="Go" />
+ </form>
+
Translations and JavaScript
===========================
@@ -752,7 +752,7 @@ The main solution to these problems is the ``javascript_catalog`` view, which
sends out a JavaScript code library with functions that mimic the ``gettext``
interface, plus an array of translation strings. Those translation strings are
taken from the application, project or Django core, according to what you
-specify in either the {{{info_dict}}} or the URL.
+specify in either the info_dict or the URL.
You hook it up like this::
@@ -817,8 +817,8 @@ pluralizations).
Creating JavaScript translation catalogs
----------------------------------------
-You create and update the translation catalogs the same way as the other Django
-translation catalogs -- with the {{{make-messages.py}}} tool. The only
+You create and update the translation catalogs the same way as the other
+Django translation catalogs -- with the make-messages.py tool. The only
difference is you need to provide a ``-d djangojs`` parameter, like this::
make-messages.py -d djangojs -l de
@@ -827,13 +827,13 @@ This would create or update the translation catalog for JavaScript for German.
After updating translation catalogs, just run ``compile-messages.py`` the same
way as you do with normal Django translation catalogs.
-Specialities of Django translation
+Specialties of Django translation
==================================
-If you know ``gettext``, you might note these specialities in the way Django
+If you know ``gettext``, you might note these specialties in the way Django
does translation:
- * The string domain is ``django`` or ``djangojs``. The string domain is
+ * The string domain is ``django`` or ``djangojs``. This string domain is
used to differentiate between different programs that store their data
in a common message-file library (usually ``/usr/share/locale/``). The
``django`` domain is used for python and template translation strings
@@ -841,5 +841,5 @@ does translation:
domain is only used for JavaScript translation catalogs to make sure
that those are as small as possible.
* Django doesn't use ``xgettext`` alone. It uses Python wrappers around
- ``xgettext`` and ``msgfmt``. That's mostly for convenience.
+ ``xgettext`` and ``msgfmt``. This is mostly for convenience.
diff --git a/docs/install.txt b/docs/install.txt
index 9300c7f0f8..173f4941ee 100644
--- a/docs/install.txt
+++ b/docs/install.txt
@@ -67,6 +67,16 @@ installed.
* If you're using Oracle, you'll need cx_Oracle_, version 4.3.1 or higher.
+If you plan to use Django's ``manage.py syncdb`` command to
+automatically create database tables for your models, you'll need to
+ensure that Django has permission to create tables in the database
+you're using; if you plan to manually create the tables, you can
+simply grant Django ``SELECT``, ``INSERT``, ``UPDATE`` and ``DELETE``
+permissions. Django does not issue ``ALTER TABLE`` statements, and so
+will not require permission to do so. If you will be using Django's
+`testing framework`_ with data fixtures, Django will need permission
+to create a temporary test database.
+
.. _PostgreSQL: http://www.postgresql.org/
.. _MySQL: http://www.mysql.com/
.. _Django's ticket system: http://code.djangoproject.com/report/1
@@ -78,6 +88,7 @@ installed.
.. _MySQL backend: ../databases/
.. _cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/
.. _Oracle: http://www.oracle.com/
+.. _testing framework: ../testing/
Remove any old versions of Django
=================================
diff --git a/docs/newforms.txt b/docs/newforms.txt
index e9e98944a0..19c5fc247f 100644
--- a/docs/newforms.txt
+++ b/docs/newforms.txt
@@ -776,6 +776,27 @@ form data *and* file data::
# Unbound form with a image field
>>> f = ContactFormWithMugshot()
+Testing for multipart forms
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you're writing reusable views or templates, you may not know ahead of time
+whether your form is a multipart form or not. The ``is_multipart()`` method
+tells you whether the form requires multipart encoding for submission::
+
+ >>> f = ContactFormWithMugshot()
+ >>> f.is_multipart()
+ True
+
+Here's an example of how you might use this in a template::
+
+ {% if form.is_multipart %}
+ <form enctype="multipart/form-data" method="post" action="/foo/">
+ {% else %}
+ <form method="post" action="/foo/">
+ {% endif %}
+ {% form %}
+ </form>
+
Subclassing forms
-----------------
diff --git a/docs/templates.txt b/docs/templates.txt
index dbed0ba5c9..9adf15731b 100644
--- a/docs/templates.txt
+++ b/docs/templates.txt
@@ -1419,6 +1419,12 @@ A collection of template filters that implement these common markup languages:
* Markdown
* ReST (ReStructured Text)
+See the `markup section`_ of the `add-ons documentation`_ for more
+information.
+
+.. _markup section: ../add_ons/#markup
+.. _add-ons documentation: ../add_ons/
+
django.contrib.webdesign
------------------------
diff --git a/docs/testing.txt b/docs/testing.txt
index e15abd50d5..04c999cda8 100644
--- a/docs/testing.txt
+++ b/docs/testing.txt
@@ -137,12 +137,14 @@ When you `run your tests`_, the test runner will find this docstring, notice
that portions of it look like an interactive Python session, and execute those
lines while checking that the results match.
-In the case of model tests, note that the test runner takes care of creating
-its own test database. That is, any test that accesses a database -- by
-creating and saving model instances, for example -- will not affect your
-production database. Each doctest begins with a "blank slate" -- a fresh
-database containing an empty table for each model. (See the section on
-fixtures, below, for more on this.)
+In the case of model tests, note that the test runner takes care of
+creating its own test database. That is, any test that accesses a
+database -- by creating and saving model instances, for example --
+will not affect your production database. Each doctest begins with a
+"blank slate" -- a fresh database containing an empty table for each
+model. (See the section on fixtures, below, for more on this.) Note
+that to use this feature, the database user Django is connecting as
+must have ``CREATE DATABASE`` rights.
For more details about how doctest works, see the `standard library
documentation for doctest`_
diff --git a/docs/tutorial01.txt b/docs/tutorial01.txt
index 2e18fd6130..4e97dcd541 100644
--- a/docs/tutorial01.txt
+++ b/docs/tutorial01.txt
@@ -46,7 +46,7 @@ will create a ``mysite`` directory in your current directory.
If you're using Mac OS X, you may see the message "permission
denied" when you try to run ``django-admin.py startproject``. This
is because, on Unix-based systems like OS X, a file must be marked
- as "exceutable" before it can be run as a program. To do this, open
+ as "executable" before it can be run as a program. To do this, open
Terminal.app and navigate (using the `cd` command) to the directory
where ``django-admin.py`` is installed, then run the command
``chmod +x django-admin.py``.