1
0
mirror of https://github.com/django/django.git synced 2025-07-04 17:59:13 +00:00

[soc2009/multidb] Merged up to trunk r11267.

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/multidb@11272 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2009-07-19 21:31:13 +00:00
parent 8395544774
commit 0536cb98d5
6 changed files with 136 additions and 124 deletions

View File

@ -14,6 +14,7 @@ The PRIMARY AUTHORS are (and/or have been):
* Robert Wittams
* Gary Wilson
* Brian Rosner
* Justin Bronn
* Karen Tracey
More information on the main contributors to Django can be found in

View File

@ -14,16 +14,12 @@ that need to be done. I'm trying to be as granular as possible.
flush, reset, and syncdb need to not prompt the user multiple times.
3) Remove any references to the global ``django.db.connection`` object in the
SQL creation process. This includes(but is probably not limited to):
3) Handle nesting of Querysets using __in across multiple dbs.
* The way we create ``Query`` from ``BaseQuery`` is awkward and hacky.
* ``Field.get_db_prep_lookup``
* ``DateField.get_db_prep_value``
* ``DateTimeField.get_db_prep_value``
* ``DecimalField.get_db_prep_save``
* ``TimeField.get_db_prep_value``
4) Handle backends with custom Query classes.
4) Wait on the merge of the m2m stuff.
5) Wait on the merge of the m2m stuff.
6) Time permitting add support for a ``DatabaseManager``.
6) Fix django.contrib.gis, it's broken in all sorts of ways.
7) Time permitting add support for a ``DatabaseManager``.

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-20 12:58+0200\n"
"POT-Creation-Date: 2009-07-17 21:59+0200\n"
"PO-Revision-Date: 2008-02-25 15:53+0100\n"
"Last-Translator: Jarek Zgoda <jarek.zgoda@gmail.com>\n"
"MIME-Version: 1.0\n"
@ -223,7 +223,7 @@ msgstr "chiński tradycyjny"
msgid "Successfully deleted %(count)d %(items)s."
msgstr "Usunięto %(count)d %(items)s."
#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
msgid "Are you sure?"
msgstr "Jesteś pewien?"
@ -321,7 +321,7 @@ msgstr "Zmieniono %s"
#: contrib/admin/options.py:519 contrib/admin/options.py:529
#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
#: forms/models.py:587
#: forms/models.py:600
msgid "and"
msgstr "i"
@ -344,53 +344,53 @@ msgstr "Usunięto %(name)s \"%(object)s\"."
msgid "No fields changed."
msgstr "Żadne pole nie zmienione."
#: contrib/admin/options.py:598 contrib/auth/admin.py:67
#: contrib/admin/options.py:599 contrib/auth/admin.py:67
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "%(name)s \"%(obj)s\" dodany pomyślnie."
#: contrib/admin/options.py:602 contrib/admin/options.py:635
#: contrib/admin/options.py:603 contrib/admin/options.py:636
#: contrib/auth/admin.py:75
msgid "You may edit it again below."
msgstr "Możesz ponownie edytować wpis poniżej."
#: contrib/admin/options.py:612 contrib/admin/options.py:645
#: contrib/admin/options.py:613 contrib/admin/options.py:646
#, python-format
msgid "You may add another %s below."
msgstr "Możesz dodać nowy wpis %s poniżej."
#: contrib/admin/options.py:633
#: contrib/admin/options.py:634
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "%(name)s \"%(obj)s\" zostało pomyślnie zmienione."
#: contrib/admin/options.py:641
#: contrib/admin/options.py:642
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
"%(name)s \"%(obj)s\" dodane pomyślnie. Możesz edytować ponownie wpis poniżej."
#: contrib/admin/options.py:772
#: contrib/admin/options.py:773
#, python-format
msgid "Add %s"
msgstr "Dodaj %s"
#: contrib/admin/options.py:803 contrib/admin/options.py:1003
#: contrib/admin/options.py:804 contrib/admin/options.py:1005
#, python-format
msgid "%(name)s object with primary key %(key)r does not exist."
msgstr "Obiekt %(name)s o kluczu głównym %(key)r nie istnieje."
#: contrib/admin/options.py:860
#: contrib/admin/options.py:861
#, python-format
msgid "Change %s"
msgstr "Zmień %s"
#: contrib/admin/options.py:904
#: contrib/admin/options.py:905
msgid "Database error"
msgstr "Błąd bazy danych"
#: contrib/admin/options.py:940
#: contrib/admin/options.py:941
#, python-format
msgid "%(count)s %(name)s was changed successfully."
msgid_plural "%(count)s %(name)s were changed successfully."
@ -398,17 +398,17 @@ msgstr[0] "%(count)s %(name)s został pomyślnie zmieniony."
msgstr[1] "%(count)s %(name)s zostały pomyślnie zmienione."
msgstr[2] "%(count)s %(name)s zostało pomyślnie zmienionych."
#: contrib/admin/options.py:1018
#: contrib/admin/options.py:1020
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "%(name)s \"%(obj)s\" usunięty pomyślnie."
#: contrib/admin/options.py:1054
#: contrib/admin/options.py:1057
#, python-format
msgid "Change history: %s"
msgstr "Historia zmian: %s"
#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
#: contrib/auth/forms.py:80
msgid ""
"Please enter a correct username and password. Note that both fields are case-"
@ -417,11 +417,11 @@ msgstr ""
"Proszę wpisać poprawną nazwę użytkownika i hasło. Uwaga: wielkość liter ma "
"znaczenie."
#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
msgid "Please log in again, because your session has expired."
msgstr "Twoja sesja wygasła, zaloguj się ponownie."
#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
@ -429,27 +429,27 @@ msgstr ""
"Twoja przeglądarka nie chce akceptować ciasteczek. Zmień jej ustawienia i "
"spróbuj ponownie."
#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
#: contrib/admin/views/decorators.py:66
msgid "Usernames cannot contain the '@' character."
msgstr "Nazwy użytkowników nie mogą zawierać znaku '@'."
#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
#, python-format
msgid "Your e-mail address is not your username. Try '%s' instead."
msgstr "Podany adres e-mail nie jest Twoją nazwą użytkownika. Spróbuj '%s'."
#: contrib/admin/sites.py:360
#: contrib/admin/sites.py:367
msgid "Site administration"
msgstr "Administracja stroną"
#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
#: contrib/admin/templates/registration/password_reset_complete.html:14
#: contrib/admin/views/decorators.py:20
msgid "Log in"
msgstr "Zaloguj się"
#: contrib/admin/sites.py:417
#: contrib/admin/sites.py:426
#, python-format
msgid "%s administration"
msgstr "%s - administracja"
@ -484,7 +484,7 @@ msgstr "Zmień:"
msgid "Lookup"
msgstr "Szukaj"
#: contrib/admin/widgets.py:236
#: contrib/admin/widgets.py:235
msgid "Add Another"
msgstr "Dodaj kolejny"
@ -499,7 +499,7 @@ msgstr "Niestety, żądana strona nie została znaleziona."
#: contrib/admin/templates/admin/500.html:4
#: contrib/admin/templates/admin/app_index.html:8
#: contrib/admin/templates/admin/base.html:31
#: contrib/admin/templates/admin/base.html:54
#: contrib/admin/templates/admin/change_form.html:17
#: contrib/admin/templates/admin/change_list.html:25
#: contrib/admin/templates/admin/delete_confirmation.html:6
@ -545,7 +545,7 @@ msgstr "Wykonaj wybraną akcję"
#: contrib/admin/templates/admin/actions.html:4
msgid "Go"
msgstr "Szukaj"
msgstr "Wykonaj"
#: contrib/admin/templates/admin/app_index.html:10
#: contrib/admin/templates/admin/index.html:19
@ -553,18 +553,18 @@ msgstr "Szukaj"
msgid "%(name)s"
msgstr "%(name)s"
#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/admin/base.html:27
msgid "Welcome,"
msgstr "Witaj,"
#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/admin/base.html:32
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
msgid "Documentation"
msgstr "Dokumentacja"
#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/admin/base.html:40
#: contrib/admin/templates/admin/auth/user/change_password.html:14
#: contrib/admin/templates/admin/auth/user/change_password.html:47
#: contrib/admin/templates/registration/password_change_done.html:3
@ -572,7 +572,7 @@ msgstr "Dokumentacja"
msgid "Change password"
msgstr "Zmiana hasła"
#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/admin/base.html:47
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
msgid "Log out"
@ -755,6 +755,11 @@ msgstr ""
msgid "Show all"
msgstr "Pokaż wszystko"
#: contrib/admin/templates/admin/pagination.html:11
#: contrib/admin/templates/admin/submit_line.html:3
msgid "Save"
msgstr "Zapisz"
#: contrib/admin/templates/admin/search_form.html:8
msgid "Search"
msgstr "Szukaj"
@ -772,10 +777,6 @@ msgstr[2] "%(counter)s wyników"
msgid "%(full_result_count)s total"
msgstr "%(full_result_count)s trafień"
#: contrib/admin/templates/admin/submit_line.html:3
msgid "Save"
msgstr "Zapisz"
#: contrib/admin/templates/admin/submit_line.html:5
msgid "Save as new"
msgstr "Zapisz jako nowe"
@ -999,144 +1000,145 @@ msgstr "strona"
msgid "template"
msgstr "szablon"
#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
#: contrib/admindocs/views.py:62
#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
#: contrib/admindocs/views.py:65
msgid "tag:"
msgstr "tag:"
#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
#: contrib/admindocs/views.py:95
#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
#: contrib/admindocs/views.py:98
msgid "filter:"
msgstr "filtr:"
#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
#: contrib/admindocs/views.py:159
#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
#: contrib/admindocs/views.py:162
msgid "view:"
msgstr "widok:"
#: contrib/admindocs/views.py:187
#: contrib/admindocs/views.py:190
#, python-format
msgid "App %r not found"
msgstr "Aplikacja %r nie została znaleziona"
#: contrib/admindocs/views.py:194
#: contrib/admindocs/views.py:197
#, python-format
msgid "Model %(model_name)r not found in app %(app_label)r"
msgstr "Model %(model_name)r nie został znaleziony w aplikacji %(app_label)r"
#: contrib/admindocs/views.py:206
#: contrib/admindocs/views.py:209
#, python-format
msgid "the related `%(app_label)s.%(data_type)s` object"
msgstr "powiązany obiekt `%(app_label)s.%(data_type)s`"
#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
msgid "model:"
msgstr "model:"
#: contrib/admindocs/views.py:237
#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
#, python-format
msgid "related `%(app_label)s.%(object_name)s` objects"
msgstr "powiązane obiekty `%(app_label)s.%(object_name)s`"
#: contrib/admindocs/views.py:242
#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
#, python-format
msgid "all %s"
msgstr "wszystkie %s"
#: contrib/admindocs/views.py:247
#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
#, python-format
msgid "number of %s"
msgstr "liczba %s"
#: contrib/admindocs/views.py:252
#: contrib/admindocs/views.py:271
#, python-format
msgid "Fields on %s objects"
msgstr "Pola obiektów %s"
#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
msgid "Integer"
msgstr "Liczba całkowita"
#: contrib/admindocs/views.py:316
#: contrib/admindocs/views.py:335
msgid "Boolean (Either True or False)"
msgstr "Wartość logiczna (True, False - prawda lub fałsz)"
#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
#, python-format
msgid "String (up to %(max_length)s)"
msgstr "Łańcuch (do %(max_length)s znaków)"
#: contrib/admindocs/views.py:318
#: contrib/admindocs/views.py:337
msgid "Comma-separated integers"
msgstr "Liczby całkowite rozdzielone przecinkami"
#: contrib/admindocs/views.py:319
#: contrib/admindocs/views.py:338
msgid "Date (without time)"
msgstr "Data (bez godziny)"
#: contrib/admindocs/views.py:320
#: contrib/admindocs/views.py:339
msgid "Date (with time)"
msgstr "Data (z godziną)"
#: contrib/admindocs/views.py:321
#: contrib/admindocs/views.py:340
msgid "Decimal number"
msgstr "Liczba dziesiętna"
#: contrib/admindocs/views.py:322
#: contrib/admindocs/views.py:341
msgid "E-mail address"
msgstr "Adres e-mail"
#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
#: contrib/admindocs/views.py:327
#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
#: contrib/admindocs/views.py:346
msgid "File path"
msgstr "Ścieżka do pliku"
#: contrib/admindocs/views.py:325
#: contrib/admindocs/views.py:344
msgid "Floating point number"
msgstr "Liczba zmiennoprzecinkowa"
#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
msgid "IP address"
msgstr "Adres IP"
#: contrib/admindocs/views.py:331
#: contrib/admindocs/views.py:350
msgid "Boolean (Either True, False or None)"
msgstr "Wartość logiczna (True, False, None - prawda, fałsz lub nic)"
#: contrib/admindocs/views.py:332
#: contrib/admindocs/views.py:351
msgid "Relation to parent model"
msgstr "Relacja do modelu rodzica"
#: contrib/admindocs/views.py:333
#: contrib/admindocs/views.py:352
msgid "Phone number"
msgstr "Numer telefonu"
#: contrib/admindocs/views.py:338
#: contrib/admindocs/views.py:357
msgid "Text"
msgstr "Tekst"
#: contrib/admindocs/views.py:339
#: contrib/admindocs/views.py:358
msgid "Time"
msgstr "Czas"
#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
#: contrib/comments/templates/comments/moderation_queue.html:37
#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
msgid "URL"
msgstr "URL"
#: contrib/admindocs/views.py:341
#: contrib/admindocs/views.py:360
msgid "U.S. state (two uppercase letters)"
msgstr "Stan USA (dwie duże litery)"
#: contrib/admindocs/views.py:342
#: contrib/admindocs/views.py:361
msgid "XML text"
msgstr "Tekst XML"
#: contrib/admindocs/views.py:368
#: contrib/admindocs/views.py:387
#, python-format
msgid "%s does not appear to be a urlpattern object"
msgstr "%s nie jest obiektem urlpattern"
@ -3920,14 +3922,14 @@ msgstr ""
msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
msgstr "Proszę wpisać poprawną godzinę w formacie HH:MM[:ss[.uuuuuu]]."
#: db/models/fields/related.py:792
#: db/models/fields/related.py:816
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"Przytrzymaj wciśnięty klawisz \"Ctrl\" lub \"Command\" na Mac'u aby "
"zaznaczyć więcej niż jeden wybór."
#: db/models/fields/related.py:870
#: db/models/fields/related.py:894
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@ -4051,7 +4053,7 @@ msgid "Select a valid choice. %(value)s is not one of the available choices."
msgstr ""
"Wybierz poprawną wartość. %(value)s nie jest jednym z dostępnych wyborów."
#: forms/fields.py:704 forms/fields.py:765 forms/models.py:991
#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
msgid "Enter a list of values."
msgstr "Podaj listę wartości."
@ -4080,43 +4082,43 @@ msgstr ""
msgid "%(model_name)s with this %(field_label)s already exists."
msgstr "%(field_label)s już istnieje w %(model_name)s."
#: forms/models.py:581
#: forms/models.py:594
#, python-format
msgid "Please correct the duplicate data for %(field)s."
msgstr "Popraw zduplikowane dane w %(field)s."
#: forms/models.py:585
#: forms/models.py:598
#, python-format
msgid "Please correct the duplicate data for %(field)s, which must be unique."
msgstr "Popraw zduplikowane dane w %(field)s, które wymaga unikalności."
#: forms/models.py:591
#: forms/models.py:604
#, python-format
msgid ""
"Please correct the duplicate data for %(field_name)s which must be unique "
"for the %(lookup)s in %(date_field)s."
msgstr ""
"Popraw zduplikowane dane w %(field_name)s, które wymaga unikalności dla "
"%(lookup)s w polu %(date_field)s."
"Popraw zduplikowane dane w %(field_name)s, które wymaga unikalności dla %"
"(lookup)s w polu %(date_field)s."
#: forms/models.py:599
#: forms/models.py:612
msgid "Please correct the duplicate values below."
msgstr "Popraw poniższe zduplikowane wartości."
#: forms/models.py:855
#: forms/models.py:867
msgid "The inline foreign key did not match the parent instance primary key."
msgstr "Osadzony klucz obcy nie pasuje do klucza głównego obiektu rodzica."
#: forms/models.py:918
#: forms/models.py:930
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr "Wybierz poprawną wartość. Podana nie jest jednym z dostępnych wyborów."
#: forms/models.py:992
#: forms/models.py:1004
#, python-format
msgid "Select a valid choice. %s is not one of the available choices."
msgstr "Wybierz poprawną wartość. %s nie jest jednym z dostępnych wyborów."
#: forms/models.py:994
#: forms/models.py:1006
#, python-format
msgid "\"%s\" is not a valid value for a primary key."
msgstr "\"%s\" nie jest poprawną wartością klucza głównego."

View File

@ -154,6 +154,19 @@ Gary Wilson
broken windows. He's continued to do that necessary tidying up work
throughout the code base since then.
Justin Bronn
Justin Bronn is a computer scientist and attorney specializing
in legal topics related to intellectual property and spatial law.
In 2007, Justin began developing ``django.contrib.gis`` in a branch,
a.k.a. GeoDjango_, which was merged in time for Django 1.0. While
implementing GeoDjango, Justin obtained a deep knowledge of Django's
internals including the ORM, the admin, and Oracle support.
Justin lives in Houston, Texas.
.. _GeoDjango: http://geodjango.org/
Karen Tracey
Karen has a background in distributed operating systems (graduate school),
communications software (industry) and crossword puzzle construction
@ -187,16 +200,6 @@ Ian Kelly
Matt Boersma
Matt is also responsible for Django's Oracle support.
Justin Bronn
Justin Bronn is a computer scientist and third-year law student at the
University of Houston who enjoys studying legal topics related to
intellectual property and spatial law.
Justin is the primary developer of ``django.contrib.gis``, a.k.a.
GeoDjango_.
.. _GeoDjango: http://geodjango.org/
Jeremy Dunck
Jeremy the lead developer of Pegasus News, a personalized local site based
in Dallas, Texas. An early contributor to Greasemonkey and Django, he sees

View File

@ -4,6 +4,8 @@
URL dispatcher
==============
.. module:: django.core.urlresolvers
A clean, elegant URL scheme is an important detail in a high-quality Web
application. Django lets you design URLs however you want, with no framework
limitations.
@ -182,11 +184,13 @@ your URLconf. This gives your module access to these objects:
patterns
--------
.. function:: patterns(prefix, pattern_description, ...)
A function that takes a prefix, and an arbitrary number of URL patterns, and
returns a list of URL patterns in the format Django needs.
The first argument to ``patterns()`` is a string ``prefix``. See
"The view prefix" below.
`The view prefix`_ below.
The remaining arguments should be tuples in this format::
@ -222,6 +226,8 @@ url
.. versionadded:: 1.0
.. function:: url(regex, view, kwargs=None, name=None, prefix='')
You can use the ``url()`` function, instead of a tuple, as an argument to
``patterns()``. This is convenient if you want to specify a name without the
optional extra arguments dictionary. For example::
@ -244,6 +250,8 @@ The ``prefix`` parameter has the same meaning as the first argument to
handler404
----------
.. data:: handler404
A string representing the full Python import path to the view that should be
called if none of the URL patterns match.
@ -253,6 +261,8 @@ value should suffice.
handler500
----------
.. data:: handler500
A string representing the full Python import path to the view that should be
called in case of server errors. Server errors happen when you have runtime
errors in view code.
@ -263,12 +273,14 @@ value should suffice.
include
-------
.. function:: include(<module or pattern_list>)
A function that takes a full Python import path to another URLconf module that
should be "included" in this place.
.. versionadded:: 1.1
:meth:``include`` also accepts as an argument an iterable that returns URL
:func:`include` also accepts as an argument an iterable that returns URL
patterns.
See `Including other URLconfs`_ below.
@ -421,7 +433,7 @@ This approach can be seen in use when you deploy an instance of the Django
Admin application. The Django Admin is deployed as instances of a
:class:`AdminSite`; each :class:`AdminSite` instance has an attribute
``urls`` that returns the url patterns available to that instance. It is this
attribute that you ``included()`` into your projects ``urlpatterns`` when you
attribute that you ``include()`` into your projects ``urlpatterns`` when you
deploy the admin instance.
.. _`Django Web site`: http://www.djangoproject.com/
@ -451,8 +463,8 @@ included URLconf, as expected.
Defining URL Namespaces
-----------------------
When you need to deploying multiple instances of a single application, it can
be helpful to be able to differentiate between instances. This is especially
When you need to deploy multiple instances of a single application, it can be
helpful to be able to differentiate between instances. This is especially
important when using _`named URL patterns <naming-url-patterns>`, since
multiple instances of a single application will share named URLs. Namespaces
provide a way to tell these named URLs apart.
@ -466,15 +478,15 @@ A URL namespace comes in two parts, both of which are strings:
* An **instance namespace**. This identifies a specific instance of an
application. Instance namespaces should be unique across your entire
project. However, and instance namespace can be the same as the
project. However, an instance namespace can be the same as the
application namespace. This is used to specify a default instance of an
application. For example, the default Django Admin instance has an
instance namespace of ``admin``.
URL Namespaces can be specified in two ways.
Firstly, you can provide the applicaiton and instance namespace as arguments
to the ``include()`` when you construct your URL patterns. For example,::
Firstly, you can provide the application and instance namespace as arguments
to ``include()`` when you construct your URL patterns. For example,::
(r'^help/', include('apps.help.urls', namespace='foo', app_name='bar')),
@ -494,7 +506,7 @@ instance namespace. For example, the ``urls`` attribute of Django's
an admin site, plus the name of the admin instance, and the application
namespace ``admin``.
Once you have defined namespace URLs, you can reverse them. For details on
Once you have defined namespaced URLs, you can reverse them. For details on
reversing namespaced urls, see the documentation on :ref:`reversing namespaced
URLs <topics-http-reversing-url-namespaces>`.
@ -679,18 +691,18 @@ URL namespaces
.. versionadded:: 1.1
Namespaced URLs are specified using the `:` operator. For example, the main index
page of the admin application is referenced using ``admin:index``. This indicates
a namespace of ``admin``, and a named URL of ``index``.
Namespaced URLs are specified using the ``:`` operator. For example, the main
index page of the admin application is referenced using ``admin:index``. This
indicates a namespace of ``admin``, and a named URL of ``index``.
Namespaces can also be nested. The named URL ``foo:bar:whiz`` would look for
a pattern named ``whiz`` in the namespace ``bar`` that is itself defined within
the top-level namespace ``foo``.
When given a namespaced URL (e.g.,, `myapp:index`) to resolve, Django splits
When given a namespaced URL (e.g. ``myapp:index``) to resolve, Django splits
the fully qualified name into parts, and then tries the following lookup:
1. Django then looks for a matching application namespace (in this
1. First, Django looks for a matching application namespace (in this
example, ``myapp``). This will yield a list of instances of that
application.
@ -702,15 +714,15 @@ the fully qualified name into parts, and then tries the following lookup:
template.
The current application can also be specified manually as an argument
to the :method:``reverse()`` function.
to the :func:`reverse()` function.
3. If there is no current application. Django looks for a default
application instance. The default application instance is the instance
that has an instance namespace matching the application namespace (in
this example, an instance of the ``myapp`` called ``myapp``)
this example, an instance of the ``myapp`` called ``myapp``).
4. If there is no default application instance, Django will pick the first
deployed instance of the application, whatever it's instance name may be.
deployed instance of the application, whatever its instance name may be.
5. If the provided namespace doesn't match an application namespace in
step 2, Django will attempt a direct lookup of the namespace as an
@ -762,7 +774,6 @@ If you need to use something similar to the :ttag:`url` template tag in
your code, Django provides the following method (in the
``django.core.urlresolvers`` module):
.. currentmodule:: django.core.urlresolvers
.. function:: reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
``viewname`` is either the function name (either a function reference, or the
@ -812,7 +823,6 @@ resolve()
The :func:`django.core.urlresolvers.resolve` function can be used for resolving
URL paths to the corresponding view functions. It has the following signature:
.. currentmodule:: django.core.urlresolvers
.. function:: resolve(path, urlconf=None)
``path`` is the URL path you want to resolve. As with ``reverse()`` above, you