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

Merged to trunk r1168

git-svn-id: http://code.djangoproject.com/svn/django/branches/new-admin@1169 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Robert Wittams 2005-11-11 14:44:12 +00:00
commit 3f24ff1f87
32 changed files with 535 additions and 400 deletions

View File

@ -136,9 +136,6 @@ ALLOWED_INCLUDE_ROOTS = ()
# is an admin.
ADMIN_FOR = ()
# Whether to check the flat-pages table as a last resort for all 404 errors.
USE_FLAT_PAGES = True
# 404s that may be ignored.
IGNORABLE_404_STARTS = ('/cgi-bin/', '/_vti_bin', '/_vti_inf')
IGNORABLE_404_ENDS = ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')

View File

@ -14,8 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Poedit-Language: Czech\n"
"X-Poedit-Country: CZECH REPUBLIC\n"
@ -265,12 +264,8 @@ msgid "Server Error <em>(500)</em>"
msgstr "Chyba serveru <em>(500)</em>"
#: contrib/admin/templates/admin/500.html:10
msgid ""
"There's been an error. It's been reported to the site administrators via e-"
"mail and should be fixed shortly. Thanks for your patience."
msgstr ""
"Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a "
"měla by být brzy odstraněna. Děkujeme za trpělivost."
msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
msgstr "Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a měla by být brzy odstraněna. Děkujeme za trpělivost."
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
@ -361,13 +356,8 @@ msgstr "Odhlásit se"
#: contrib/admin/templates/admin/delete_confirmation.html:7
#, fuzzy, python-format
msgid ""
"Deleting the %(object_name)s '%(object)s' would result in deleting related "
"objects, but your account doesn't have permission to delete the following "
"types of objects:"
msgstr ""
"Mazání %(object_name)s '%(object)s' by vyústilo ve vymazání souvisejících "
"objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:"
msgid "Deleting the %(object_name)s '%(object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
msgstr "Mazání %(object_name)s '%(object)s' by vyústilo ve vymazání souvisejících objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:"
#: contrib/admin/templates/admin/500.html:6
msgid "Server error (500)"
@ -445,12 +435,8 @@ msgstr ""
#: contrib/admin/templates/admin/delete_confirmation.html:14
#, python-format
msgid ""
"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
"the following related items will be deleted:"
msgstr ""
"Jste si jist(á), že chcete smazat %(object_name)s \"%(object)s\"? Všechny "
"následující související položky budou smazány:"
msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
msgstr "Jste si jist(á), že chcete smazat %(object_name)s \"%(object)s\"? Všechny následující související položky budou smazány:"
#: contrib/admin/templates/admin/delete_confirmation.html:18
msgid "Yes, I'm sure"
@ -479,12 +465,8 @@ msgid "Password reset"
msgstr "Obnovení hesla"
#: contrib/admin/templates/registration/password_reset_form.html:12
msgid ""
"Forgotten your password? Enter your e-mail address below, and we'll reset "
"your password and e-mail the new one to you."
msgstr ""
"Zapomněl(a) jste heslo? Vložte níže Vaši e-mailovou adresu a my Vaše heslo "
"obnovíme a zašleme Vám e-mailem nové."
msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
msgstr "Zapomněl(a) jste heslo? Vložte níže Vaši e-mailovou adresu a my Vaše heslo obnovíme a zašleme Vám e-mailem nové."
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "E-mail address:"
@ -508,20 +490,12 @@ msgid "Password reset successful"
msgstr "Obnovení hesla bylo úspěšné"
#: contrib/admin/templates/registration/password_reset_done.html:12
msgid ""
"We've e-mailed a new password to the e-mail address you submitted. You "
"should be receiving it shortly."
msgstr ""
"Poslali jsme Vám e-mailem nové heslo na adresu, kterou jste zadal(a). Měl(a) "
"byste ji dostat během okamžiku."
msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
msgstr "Poslali jsme Vám e-mailem nové heslo na adresu, kterou jste zadal(a). Měl(a) byste ji dostat během okamžiku."
#: contrib/admin/templates/registration/password_change_form.html:12
msgid ""
"Please enter your old password, for security's sake, and then enter your new "
"password twice so we can verify you typed it in correctly."
msgstr ""
"Prosíme, pro zabezpečení vložte svoje staré heslo a poté vložte dvakrát nové "
"heslo, takže můžeme ověřit, že jste ho napsal(a) správně."
msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
msgstr "Prosíme, pro zabezpečení vložte svoje staré heslo a poté vložte dvakrát nové heslo, takže můžeme ověřit, že jste ho napsal(a) správně."
#: contrib/admin/templates/registration/password_change_form.html:17
msgid "Old password:"
@ -638,23 +612,28 @@ msgstr "Leden"
msgid "February"
msgstr "Únor"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "March"
msgstr "Březen"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "April"
msgstr "Duben"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "May"
msgstr "Květen"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "June"
msgstr "Červen"
#: utils/dates.py:15 utils/dates.py:27
#: utils/dates.py:15
#: utils/dates.py:27
msgid "July"
msgstr "Červenec"
@ -726,7 +705,10 @@ msgstr "weby"
msgid "label"
msgstr "nadpis"
#: models/core.py:29 models/core.py:40 models/auth.py:6 models/auth.py:19
#: models/core.py:29
#: models/core.py:40
#: models/auth.py:6
#: models/auth.py:19
msgid "name"
msgstr "jméno"
@ -755,23 +737,16 @@ msgid "redirect from"
msgstr "přesměrovat z"
#: models/core.py:69
msgid ""
"This should be an absolute path, excluding the domain name. Example: '/"
"events/search/'."
msgstr ""
"Toto by měla být absolutní cesta, bez domény. Např. '/udalosti/hledat/'."
msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
msgstr "Toto by měla být absolutní cesta, bez domény. Např. '/udalosti/hledat/'."
#: models/core.py:70
msgid "redirect to"
msgstr "přesměrovat na"
#: models/core.py:71
msgid ""
"This can be either an absolute path (as above) or a full URL starting with "
"'http://'."
msgstr ""
"Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na "
"'http://'."
msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
msgstr "Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na 'http://'."
#: models/core.py:73
msgid "redirect"
@ -782,10 +757,8 @@ msgid "redirects"
msgstr "přesměrování"
#: models/core.py:88
msgid ""
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgstr ""
"Příklad: '/o/kontakt/'. Ujistěte se, že máte počáteční a konečná lomítka."
msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgstr "Příklad: '/o/kontakt/'. Ujistěte se, že máte počáteční a konečná lomítka."
#: models/core.py:89
msgid "title"
@ -804,12 +777,8 @@ msgid "template name"
msgstr "jméno šablony"
#: models/core.py:93
msgid ""
"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
"use 'flatfiles/default'."
msgstr ""
"Například: 'flatfiles/kontaktni_stranka'. Pokud toto není zadáno, systém "
"použije 'flatfiles/default'."
msgid "Example: 'flatfiles/contact_page'. If this isn't provided, the system will use 'flatfiles/default'."
msgstr "Například: 'flatfiles/kontaktni_stranka'. Pokud toto není zadáno, systém použije 'flatfiles/default'."
#: models/core.py:94
msgid "registration required"
@ -817,9 +786,7 @@ msgstr "nutná registrace"
#: models/core.py:94
msgid "If this is checked, only logged-in users will be able to view the page."
msgstr ""
"Pokud je zaškrtnuto, pouze přihlášení uživatelé budou moci prohlížet tuto "
"stránku."
msgstr "Pokud je zaškrtnuto, pouze přihlášení uživatelé budou moci prohlížet tuto stránku."
#: models/core.py:98
msgid "flat page"
@ -857,7 +824,8 @@ msgstr "codename"
msgid "Permission"
msgstr "Oprávnění"
#: models/auth.py:11 models/auth.py:58
#: models/auth.py:11
#: models/auth.py:58
msgid "Permissions"
msgstr "Oprávnění"
@ -865,7 +833,8 @@ msgstr "Oprávnění"
msgid "Group"
msgstr "Skupina"
#: models/auth.py:23 models/auth.py:60
#: models/auth.py:23
#: models/auth.py:60
msgid "Groups"
msgstr "Skupiny"
@ -919,12 +888,8 @@ msgid "date joined"
msgstr "datum zaregistrování"
#: models/auth.py:44
msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
msgstr ""
"Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro "
"každou skupinu, ve které je."
msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
msgstr "Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro každou skupinu, ve které je."
#: models/auth.py:48
msgid "Users"
@ -944,7 +909,7 @@ msgstr "Zpráva"
#: conf/global_settings.py:37
msgid "Bengali"
msgstr ""
msgstr "Bengálsky"
#: conf/global_settings.py:37
msgid "Czech"
@ -952,7 +917,7 @@ msgstr "Česky"
#: conf/global_settings.py:38
msgid "Welsh"
msgstr ""
msgstr "Welšsky"
#: conf/global_settings.py:39
msgid "German"
@ -971,9 +936,8 @@ msgid "French"
msgstr "Francouzsky"
#: conf/global_settings.py:43
#, fuzzy
msgid "Galician"
msgstr "Galicijský"
msgstr "Galicijsky"
#: conf/global_settings.py:44
msgid "Italian"
@ -1009,8 +973,7 @@ msgstr "Tato hodnota musí obsahovat pouze znaky, čísla nebo podtržítka."
#: core/validators.py:63
msgid "This value must contain only letters, numbers, underscores and slashes."
msgstr ""
"Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo lomítka."
msgstr "Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo lomítka."
#: core/validators.py:71
msgid "Uppercase letters are not allowed here."
@ -1069,12 +1032,8 @@ msgid "Enter a valid e-mail address."
msgstr "Vložte platnou e-mailovou adresu."
#: core/validators.py:147
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
"Nahrajte na server platný obrázek. Soubor, který jste nahrál(a) nebyl "
"obrázek, nebo byl porušen."
msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
msgstr "Nahrajte na server platný obrázek. Soubor, který jste nahrál(a) nebyl obrázek, nebo byl porušen."
#: core/validators.py:154
#, python-format
@ -1140,7 +1099,8 @@ msgstr "Toto pole se musí shodovat s polem '%s'."
msgid "Please enter something for at least one field."
msgstr "Prosíme, vložte něco alespoň pro jedno pole."
#: core/validators.py:259 core/validators.py:270
#: core/validators.py:259
#: core/validators.py:270
msgid "Please enter both fields or leave them both empty."
msgstr "Prosíme, vložte obě pole, nebo je nechte obě prázdná."
@ -1170,8 +1130,7 @@ msgstr "Prosíme, vložte platné číslo."
#: core/validators.py:344
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
"Please enter a valid decimal number with at most %s total digits."
msgid_plural "Please enter a valid decimal number with at most %s total digits."
msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou celkem."
msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
@ -1179,16 +1138,10 @@ msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
#: core/validators.py:347
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
"Please enter a valid decimal number with at most %s decimal places."
msgstr[0] ""
"Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem."
msgstr[1] ""
"Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou "
"celkem."
msgstr[2] ""
"Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou "
"celkem."
msgid_plural "Please enter a valid decimal number with at most %s decimal places."
msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem."
msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem."
msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem."
#: core/validators.py:357
#, python-format
@ -1215,71 +1168,44 @@ msgstr "Nemohl jsem získat nic z %s."
#: core/validators.py:424
#, python-format
msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr "URL %(url)s vrátilo neplatnou hlavičku Content-Type '%(contenttype)s'."
#: core/validators.py:457
#, python-format
msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
"\"%(start)s\".)"
msgstr ""
"Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s "
"\"%(start)s\".)"
msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
msgstr "Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s \"%(start)s\".)"
#: core/validators.py:461
#, python-format
msgid ""
"Some text starting on line %(line)s is not allowed in that context. (Line "
"starts with \"%(start)s\".)"
msgstr ""
"Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. "
"(Řádka začíná s \"%(start)s\".)"
msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
msgstr "Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. (Řádka začíná s \"%(start)s\".)"
#: core/validators.py:466
#, python-format
msgid ""
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
"(start)s\".)"
msgstr ""
"\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%"
"(start)s\".)"
msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
msgstr "\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%(start)s\".)"
#: core/validators.py:471
#, python-format
msgid ""
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
"(start)s\".)"
msgstr ""
"\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%"
"(start)s\".)"
msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
msgstr "\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%(start)s\".)"
#: core/validators.py:475
#, python-format
msgid ""
"A tag on line %(line)s is missing one or more required attributes. (Line "
"starts with \"%(start)s\".)"
msgstr ""
"Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. "
"(Řádka začíná s \"%(start)s\".)"
msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
msgstr "Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. (Řádka začíná s \"%(start)s\".)"
#: core/validators.py:480
#, python-format
msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
"starts with \"%(start)s\".)"
msgstr ""
"Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s "
"\"%(start)s\".)"
msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
msgstr "Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s \"%(start)s\".)"
#: core/meta/fields.py:114
msgid " Separate multiple IDs with commas."
msgstr "Oddělte více identifikátorů čárkami."
#: core/meta/fields.py:117
msgid ""
" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"Podržte \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné "
"položky."
msgid " Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr "Podržte \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné položky."

View File

@ -11,7 +11,7 @@ msgstr ""
"POT-Creation-Date: 2005-11-08 09:05-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Vladimir Labath <vlado@labath.org>\n"
"Language-Team: Slovak <LL@li.org>\n"
"Language-Team: Slovak <info@labath.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -272,11 +272,11 @@ msgstr ""
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
msgid "Page not found"
msgstr "Stránka sa nenašla"
msgstr "Stránka nebola nájdená"
#: contrib/admin/templates/admin/404.html:10
msgid "We're sorry, but the requested page could not be found."
msgstr "Ľutujeme, ale požadovaná stránka sa nenašla."
msgstr "Ľutujeme, ale požadovaná stránka nebola nájdená."
#: contrib/admin/templates/admin/index.html:27
#: contrib/admin/templates/admin/change_form.html:14
@ -1276,3 +1276,41 @@ msgid ""
msgstr ""
" Podržte \"Control\", alebo \"Command\" na Mac_u, na výber viac ako jednej "
"položky."
#:commit
msgid "Post a comment"
msgstr "Pošli komentár"
msgid "Comments"
msgstr "Komentáre"
msgid "Comment"
msgstr "Komentár"
msgid "Your name"
msgstr "Vaše meno"
msgid "Preview revised comment"
msgstr "Ukázať upravený komentár"
msgid "Post public comment"
msgstr "Zveréjniť komentár"
msgid "Preview comment"
msgstr "Ukázať komentár"
msgid "Posted by"
msgstr "Poslané"
msgid "Or edit it again"
msgstr "Alebo ho vytvorte znova"
msgid "Please correct the following errors."
msgstr "Odstráňte nasledujúce chyby, prosím."
msgid "Looks like you followed a bad link. If you think it is our fault, please <a href=\"http://doma.myvtoronte.com/staznost/\">let us know</a>"
msgstr "Pozrite si linku , kde vzikla chyba. Ak si myslíte, že je to naša chyba, <a href=\"http://doma.myvtoronte.com/staznost/\">dajte nám to vedieť</a>, prosím"
msgid "Here is a link to the <a href=\"/\">homepage</a>. You know, just in case"
msgstr "Tu je adresa <a href=\"/\">úvodnej stránky</a>. Ak by ste ju potrebovali"

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: django v1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-11-08 15:05+0000\n"
"PO-Revision-Date: 2005-10-30 15:46+0800\n"
"PO-Revision-Date: 2005-11-11 13:55+0800\n"
"Last-Translator: limodou <limodou@gmail.com>\n"
"Language-Team: Simplified Chinese <limodou@gmail.com>\n"
"MIME-Version: 1.0\n"
@ -17,6 +17,7 @@ msgstr ""
"X-Poedit-Language: Chinese\n"
"X-Poedit-Country: CHINA\n"
"X-Poedit-SourceCharset: utf-8\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: contrib/admin/views/main.py:78 contrib/admin/views/main.py:106
#, python-format
@ -252,9 +253,8 @@ msgid "Home"
msgstr "首页"
#: contrib/admin/templates/admin/500.html:4
#, fuzzy
msgid "Server error"
msgstr "服务器错误(500)"
msgstr "服务器错误"
#: contrib/admin/templates/admin/500.html:6
msgid "Server error (500)"
@ -265,12 +265,8 @@ msgid "Server Error <em>(500)</em>"
msgstr "服务器错误 <em>(500)</em>"
#: contrib/admin/templates/admin/500.html:10
msgid ""
"There's been an error. It's been reported to the site administrators via e-"
"mail and should be fixed shortly. Thanks for your patience."
msgstr ""
"存在一个错误。它已经通过电子邮件被报告给站点管理员了,并且应该很快被改正。谢"
"谢你的关心。"
msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
msgstr "存在一个错误。它已经通过电子邮件被报告给站点管理员了,并且应该很快被改正。谢谢你的关心。"
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
@ -358,14 +354,9 @@ msgid "Log out"
msgstr "注销"
#: contrib/admin/templates/admin/delete_confirmation.html:7
#, fuzzy, python-format
msgid ""
"Deleting the %(object_name)s '%(object)s' would result in deleting related "
"objects, but your account doesn't have permission to delete the following "
"types of objects:"
msgstr ""
"删除 %(object_name)s '%(object)s' 会导致删除相关的对象,但你的帐号无权删除下"
"列类型的对象:"
#, python-format
msgid "Deleting the %(object_name)s '%(object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
msgstr "删除 %(object_name)s '%(object)s' 会导致删除相关的对象,但你的帐号无权删除下列类型的对象:"
#: contrib/admin/templates/admin/500.html:6
msgid "Server error (500)"
@ -443,11 +434,8 @@ msgstr ""
#: contrib/admin/templates/admin/delete_confirmation.html:14
#, python-format
msgid ""
"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
"the following related items will be deleted:"
msgstr ""
"你确信相要删除 %(object_name)s \"%(object)s\"?所有相关的项目都将被删除:"
msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
msgstr "你确信相要删除 %(object_name)s \"%(object)s\"?所有相关的项目都将被删除:"
#: contrib/admin/templates/admin/delete_confirmation.html:18
msgid "Yes, I'm sure"
@ -476,12 +464,8 @@ msgid "Password reset"
msgstr "口令重设"
#: contrib/admin/templates/registration/password_reset_form.html:12
msgid ""
"Forgotten your password? Enter your e-mail address below, and we'll reset "
"your password and e-mail the new one to you."
msgstr ""
"忘记你的口令?在下面输入你的邮箱地址,我们将重设你的口令并且将新的口令通过邮"
"件发送给你。"
msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
msgstr "忘记你的口令?在下面输入你的邮箱地址,我们将重设你的口令并且将新的口令通过邮件发送给你。"
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "E-mail address:"
@ -505,19 +489,12 @@ msgid "Password reset successful"
msgstr "口令重设成功"
#: contrib/admin/templates/registration/password_reset_done.html:12
msgid ""
"We've e-mailed a new password to the e-mail address you submitted. You "
"should be receiving it shortly."
msgstr ""
"我们已经按你所提交的邮箱地址发送了一个新的口令给你。你应该很会收到这封邮件。"
msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
msgstr "我们已经按你所提交的邮箱地址发送了一个新的口令给你。你应该很会收到这封邮件。"
#: contrib/admin/templates/registration/password_change_form.html:12
msgid ""
"Please enter your old password, for security's sake, and then enter your new "
"password twice so we can verify you typed it in correctly."
msgstr ""
"请输入你的旧口令,为了安全起见,接着要输入你的新口令两遍,这样我们可以校验你"
"输入的是否正确。"
msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
msgstr "请输入你的旧口令,为了安全起见,接着要输入你的新口令两遍,这样我们可以校验你输入的是否正确。"
#: contrib/admin/templates/registration/password_change_form.html:17
msgid "Old password:"
@ -634,23 +611,28 @@ msgstr "一月"
msgid "February"
msgstr "二月"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "March"
msgstr "三月"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "April"
msgstr "四月"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "May"
msgstr "五月"
#: utils/dates.py:14 utils/dates.py:27
#: utils/dates.py:14
#: utils/dates.py:27
msgid "June"
msgstr "六月"
#: utils/dates.py:15 utils/dates.py:27
#: utils/dates.py:15
#: utils/dates.py:27
msgid "July"
msgstr "七月"
@ -722,7 +704,10 @@ msgstr "站点"
msgid "label"
msgstr "标签"
#: models/core.py:29 models/core.py:40 models/auth.py:6 models/auth.py:19
#: models/core.py:29
#: models/core.py:40
#: models/auth.py:6
#: models/auth.py:19
msgid "name"
msgstr "名称"
@ -751,9 +736,7 @@ msgid "redirect from"
msgstr "重定向自"
#: models/core.py:69
msgid ""
"This should be an absolute path, excluding the domain name. Example: '/"
"events/search/'."
msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
msgstr "应该是一个绝对路径,不包括域名。例如:'/events/search/'。"
#: models/core.py:70
@ -761,9 +744,7 @@ msgid "redirect to"
msgstr "重定向到"
#: models/core.py:71
msgid ""
"This can be either an absolute path (as above) or a full URL starting with "
"'http://'."
msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
msgstr "可以是绝对路径(同上)或以'http://'开始的全URL。"
#: models/core.py:73
@ -775,8 +756,7 @@ msgid "redirects"
msgstr "重定向"
#: models/core.py:88
msgid ""
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgstr "例如:'/about/contact/'。请确保前导和结尾的除号。"
#: models/core.py:89
@ -796,11 +776,8 @@ msgid "template name"
msgstr "模板名称"
#: models/core.py:93
msgid ""
"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
"use 'flatfiles/default'."
msgstr ""
"例如:'flatfiles/contact_page'。如果未提供,系统将使用'flatfiles/default'。"
msgid "Example: 'flatfiles/contact_page'. If this isn't provided, the system will use 'flatfiles/default'."
msgstr "例如:'flatfiles/contact_page'。如果未提供,系统将使用'flatfiles/default'。"
#: models/core.py:94
msgid "registration required"
@ -846,7 +823,8 @@ msgstr "代码名称"
msgid "Permission"
msgstr "许可"
#: models/auth.py:11 models/auth.py:58
#: models/auth.py:11
#: models/auth.py:58
msgid "Permissions"
msgstr "许可"
@ -854,7 +832,8 @@ msgstr "许可"
msgid "Group"
msgstr "组"
#: models/auth.py:23 models/auth.py:60
#: models/auth.py:23
#: models/auth.py:60
msgid "Groups"
msgstr "组"
@ -907,11 +886,8 @@ msgid "date joined"
msgstr "加入日期"
#: models/auth.py:44
msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
msgstr ""
"除了手动设置权限以外,用户也会从他(她)所在的小组获得所赋组小组的所有权限。"
msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
msgstr "除了手动设置权限以外,用户也会从他(她)所在的小组获得所赋组小组的所有权限。"
#: models/auth.py:48
msgid "Users"
@ -931,7 +907,7 @@ msgstr "消息"
#: conf/global_settings.py:37
msgid "Bengali"
msgstr ""
msgstr "孟加拉语"
#: conf/global_settings.py:37
msgid "Czech"
@ -939,7 +915,7 @@ msgstr "捷克语"
#: conf/global_settings.py:38
msgid "Welsh"
msgstr ""
msgstr "威尔士语"
#: conf/global_settings.py:39
msgid "German"
@ -967,7 +943,7 @@ msgstr "意大利语"
#: conf/global_settings.py:45
msgid "Norwegian"
msgstr ""
msgstr "挪威语"
#: conf/global_settings.py:46
msgid "Brazilian"
@ -978,13 +954,12 @@ msgid "Russian"
msgstr "俄语"
#: conf/global_settings.py:47
#, fuzzy
msgid "Serbian"
msgstr "塞尔维亚语"
#: conf/global_settings.py:48
msgid "Simplified Chinese"
msgstr ""
msgstr "简体中文"
#: conf/global_settings.py:49
msgid "Slovak"
@ -1055,9 +1030,7 @@ msgid "Enter a valid e-mail address."
msgstr "输入一个有效的邮件地址。"
#: core/validators.py:147
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
msgstr "上传一个有效的图片。您所上传的文件或者不是图片或是一个破坏的图片。"
#: core/validators.py:154
@ -1108,11 +1081,10 @@ msgid "Enter a valid U.S. state abbreviation."
msgstr "输入一个有效的 U.S. 州缩写。"
#: core/validators.py:224
#, fuzzy, python-format
#, python-format
msgid "Watch your mouth! The word %s is not allowed here."
msgid_plural "Watch your mouth! The words %s are not allowed here."
msgstr[0] "小心你的嘴!%s 不允许在这里出现。"
msgstr[1] "小心你的嘴!%s 不允许在这里出现。"
msgstr[0] "看住你的嘴!%s 不允许在这里出现。"
#: core/validators.py:231
#, python-format
@ -1123,7 +1095,8 @@ msgstr "这个字段必须与 '%s' 字段相匹配。"
msgid "Please enter something for at least one field."
msgstr "请至少在一个字段上输入些什么。"
#: core/validators.py:259 core/validators.py:270
#: core/validators.py:259
#: core/validators.py:270
msgid "Please enter both fields or leave them both empty."
msgstr "请要么两个字段都输入或者两个字段都空着。"
@ -1151,20 +1124,16 @@ msgid "Please enter a valid decimal number."
msgstr "请输入一个有效的小数。"
#: core/validators.py:344
#, fuzzy, python-format
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
"Please enter a valid decimal number with at most %s total digits."
msgstr[0] "请输入一个有效的小数,最多 %s 个数字。"
msgstr[1] "请输入一个有效的小数,最多 %s 个数字。"
msgid_plural "Please enter a valid decimal number with at most %s total digits."
msgstr[0] "请输入一个有效的小数,最多 %s 个数字。 "
#: core/validators.py:347
#, fuzzy, python-format
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
"Please enter a valid decimal number with at most %s decimal places."
msgstr[0] "请输入一个有效的小数,最多 %s 个小数位。"
msgstr[1] "请输入一个有效的小数,最多 %s 个小数位。"
msgid_plural "Please enter a valid decimal number with at most %s decimal places."
msgstr[0] "请输入一个有效的小数,最多 %s 个小数位。 "
#: core/validators.py:357
#, python-format
@ -1191,63 +1160,44 @@ msgstr "不能从 %s 得到任何东西。"
#: core/validators.py:424
#, python-format
msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr "URL %(url)s 返回了无效的 Content-Type 头 '%(contenttype)s'。"
#: core/validators.py:457
#, python-format
msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
"\"%(start)s\".)"
msgstr ""
"请关闭未关闭的 %(tag)s 标签从第 %(line)s 行。(行开始于 \"%(start)s\"。)"
msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
msgstr "请关闭未关闭的 %(tag)s 标签从第 %(line)s 行。(行开始于 \"%(start)s\"。)"
#: core/validators.py:461
#, python-format
msgid ""
"Some text starting on line %(line)s is not allowed in that context. (Line "
"starts with \"%(start)s\".)"
msgstr ""
"在 %(line)s 行开始的一些文本不允许在那个上下文中。(行开始于 \"%(start)s\"。)"
msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
msgstr "在 %(line)s 行开始的一些文本不允许在那个上下文中。(行开始于 \"%(start)s\"。)"
#: core/validators.py:466
#, python-format
msgid ""
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
"(start)s\".)"
msgstr ""
"在 %(line)s 行的\"%(attr)s\"不是一个有效的属性。(行开始于 \"%(start)s\"。)"
msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
msgstr "在 %(line)s 行的\"%(attr)s\"不是一个有效的属性。(行开始于 \"%(start)s\"。)"
#: core/validators.py:471
#, python-format
msgid ""
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
"(start)s\".)"
msgstr ""
"在 %(line)s 行的\"<%(tag)s>\"不是一个有效的标签。(行开始于 \"%(start)s\"。)"
msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
msgstr "在 %(line)s 行的\"<%(tag)s>\"不是一个有效的标签。(行开始于 \"%(start)s\"。)"
#: core/validators.py:475
#, python-format
msgid ""
"A tag on line %(line)s is missing one or more required attributes. (Line "
"starts with \"%(start)s\".)"
msgstr ""
"在行 %(line)s 的标签少了一个或多个必须的属性。(行开始于 \"%(start)s\"。)"
msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
msgstr "在行 %(line)s 的标签少了一个或多个必须的属性。(行开始于 \"%(start)s\"。)"
#: core/validators.py:480
#, python-format
msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
"starts with \"%(start)s\".)"
msgstr ""
"在行 %(line)s 的\"%(attr)s\"属性有一个无效的值。(行开始于 \"%(start)s\"。)"
msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
msgstr "在行 %(line)s 的\"%(attr)s\"属性有一个无效的值。(行开始于 \"%(start)s\"。)"
#: core/meta/fields.py:114
msgid " Separate multiple IDs with commas."
msgstr " 用逗号分隔多个ID。"
#: core/meta/fields.py:117
msgid ""
" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgid " Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr " 按下 \"Control\"或者在Mac上按 \"Command\" 来选择一个或多个值。"

View File

@ -44,6 +44,19 @@ for setting in dir(mod):
setting_value = (setting_value,) # In case the user forgot the comma.
setattr(me, setting, setting_value)
# Expand entries in INSTALLED_APPS like "django.contrib.*" to a list
# of all those apps.
new_installed_apps = []
for app in me.INSTALLED_APPS:
if app.endswith('.*'):
appdir = os.path.dirname(__import__(app[:-2], '', '', ['']).__file__)
for d in os.listdir(appdir):
if d.isalpha() and os.path.isdir(os.path.join(appdir, d)):
new_installed_apps.append('%s.%s' % (app[:-2], d))
else:
new_installed_apps.append(app)
me.INSTALLED_APPS = new_installed_apps
# save DJANGO_SETTINGS_MODULE in case anyone in the future cares
me.SETTINGS_MODULE = os.environ.get(ENVIRONMENT_VARIABLE, '')

View File

@ -1,5 +0,0 @@
from django.conf.urls.defaults import *
urlpatterns = patterns('django.views',
(r'^(?P<url>.*)$', 'core.flatfiles.flat_file'),
)

View File

@ -49,7 +49,6 @@
</div></fieldset>
{% endif %}
{% endif %}
{% for related_object in bound_manipulator.inline_related_objects %}{% edit_inline related_object %}{% endfor %}
{% block after_related_objects%}{%endblock%}
{% submit_row bound_manipulator %}

View File

@ -4,10 +4,10 @@
{% block content %}
<div>
<h2>{%trans "Error in Template" %}</h2>
<pre>
{%blocktrans %}
In template {{name}}, error at line {{line}}:
{%endblocktrans %}
<pre>
{{message|escape}}
{{traceback|escape}}
</pre>

View File

@ -30,7 +30,7 @@ def submit_row(context, bound_manipulator):
show_delete = context['show_delete']
has_delete_permission = context['has_delete_permission']
is_popup = context['is_popup']
print is_popup.something
return {
'onclick_attrib' : (bound_manipulator.ordered_objects and change
and 'onclick="submitOrderForm();"' or ''),

View File

View File

@ -0,0 +1,15 @@
from django.contrib.flatpages.views import flatpage
from django.conf.settings import DEBUG
class FlatpageFallbackMiddleware:
def process_response(self, request, response):
if response.status_code != 404:
return response # No need to check for a flatpage for non-404 responses.
try:
return flatpage(request, request.path)
# Return the original response if any errors happened. Because this
# is a middleware, we can't assume the errors will be caught elsewhere.
except:
if DEBUG:
raise
return response

View File

@ -0,0 +1 @@
__all__ = ['flatpages']

View File

@ -0,0 +1,33 @@
from django.core import meta, validators
from django.models.core import Site
from django.utils.translation import gettext_lazy as _
class FlatPage(meta.Model):
url = meta.CharField(_('URL'), maxlength=100, validator_list=[validators.isAlphaNumericURL],
help_text=_("Example: '/about/contact/'. Make sure to have leading and trailing slashes."))
title = meta.CharField(_('title'), maxlength=200)
content = meta.TextField(_('content'))
enable_comments = meta.BooleanField(_('enable comments'))
template_name = meta.CharField(_('template name'), maxlength=70, blank=True,
help_text=_("Example: 'flatpages/contact_page'. If this isn't provided, the system will use 'flatpages/default'."))
registration_required = meta.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page."))
sites = meta.ManyToManyField(Site)
class META:
db_table = 'django_flatpages'
verbose_name = _('flat page')
verbose_name_plural = _('flat pages')
ordering = ('url',)
admin = meta.Admin(
fields = (
(None, {'fields': ('url', 'title', 'content', 'sites')}),
('Advanced options', {'classes': 'collapse', 'fields': ('enable_comments', 'registration_required', 'template_name')}),
),
list_filter = ('sites',),
search_fields = ('url', 'title'),
)
def __repr__(self):
return "%s -- %s" % (self.url, self.title)
def get_absolute_url(self):
return self.url

View File

@ -0,0 +1,5 @@
from django.conf.urls.defaults import *
urlpatterns = patterns('django.contrib.flatpages.views',
(r'^(?P<url>.*)$', 'flatpage'),
)

View File

@ -1,28 +1,28 @@
from django.core import template_loader
from django.core.extensions import get_object_or_404, DjangoContext
from django.models.core import flatfiles
from django.models.flatpages import flatpages
from django.utils.httpwrappers import HttpResponse
from django.conf.settings import SITE_ID
DEFAULT_TEMPLATE = 'flatfiles/default'
DEFAULT_TEMPLATE = 'flatpages/default'
def flat_file(request, url):
def flatpage(request, url):
"""
Flat file view
Flat page view.
Models: `core.flatfiles`
Models: `flatpages.flatpages`
Templates: Uses the template defined by the ``template_name`` field,
or `flatfiles/default` if template_name is not defined.
or `flatpages/default` if template_name is not defined.
Context:
flatfile
`flatfiles.flatfiles` object
flatpage
`flatpages.flatpages` object
"""
if not url.startswith('/'):
url = "/" + url
f = get_object_or_404(flatfiles, url__exact=url, sites__id__exact=SITE_ID)
f = get_object_or_404(flatpages, url__exact=url, sites__id__exact=SITE_ID)
# If registration is required for accessing this page, and the user isn't
# logged in, redirect to the login page.
if request.user.is_anonymous() and f.registration_required:
if f.registration_required and request.user.is_anonymous():
from django.views.auth.login import redirect_to_login
return redirect_to_login(request.path)
if f.template_name:
@ -30,6 +30,6 @@ def flat_file(request, url):
else:
t = template_loader.get_template(DEFAULT_TEMPLATE)
c = DjangoContext(request, {
'flatfile': f,
'flatpage': f,
})
return HttpResponse(t.render(c))

View File

View File

@ -0,0 +1,27 @@
from django.models.redirects import redirects
from django.utils import httpwrappers
from django.conf.settings import APPEND_SLASH, SITE_ID
class RedirectFallbackMiddleware:
def process_response(self, request, response):
if response.status_code != 404:
return response # No need to check for a redirect for non-404 responses.
path = request.get_full_path()
try:
r = redirects.get_object(site__id__exact=SITE_ID, old_path__exact=path)
except redirects.RedirectDoesNotExist:
r = None
if r is None and APPEND_SLASH:
# Try removing the trailing slash.
try:
r = redirects.get_object(site__id__exact=SITE_ID,
old_path__exact=path[:path.rfind('/')]+path[path.rfind('/')+1:])
except redirects.RedirectDoesNotExist:
pass
if r is not None:
if r == '':
return httpwrappers.HttpResponseGone()
return httpwrappers.HttpResponseRedirect(r.new_path)
# No redirect was found. Return the response.
return response

View File

@ -0,0 +1 @@
__all__ = ['redirects']

View File

@ -0,0 +1,23 @@
from django.core import meta
from django.models.core import Site
from django.utils.translation import gettext_lazy as _
class Redirect(meta.Model):
site = meta.ForeignKey(Site, radio_admin=meta.VERTICAL)
old_path = meta.CharField(_('redirect from'), maxlength=200, db_index=True,
help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))
new_path = meta.CharField(_('redirect to'), maxlength=200, blank=True,
help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))
class META:
verbose_name = _('redirect')
verbose_name_plural = _('redirects')
db_table = 'django_redirects'
unique_together=(('site', 'old_path'),)
ordering = ('old_path',)
admin = meta.Admin(
list_filter = ('site',),
search_fields = ('old_path', 'new_path'),
)
def __repr__(self):
return "%s ---> %s" % (self.old_path, self.new_path)

View File

@ -1,8 +1,6 @@
from django.conf import settings
from django.core import exceptions
from django.utils import httpwrappers
from django.core.mail import mail_managers
from django.views.core.flatfiles import flat_file
import md5, os
class CommonMiddleware:
@ -17,9 +15,6 @@ class CommonMiddleware:
- ETags: If the USE_ETAGS setting is set, ETags will be calculated from
the entire page content and Not Modified responses will be returned
appropriately.
- Flat files: For 404 responses, a flat file matching the given path
will be looked up and used if found.
"""
def process_request(self, request):
@ -55,12 +50,6 @@ class CommonMiddleware:
def process_response(self, request, response):
"Check for a flat page (for 404s) and calculate the Etag, if needed."
if response.status_code == 404:
if settings.USE_FLAT_PAGES:
try:
return flat_file(request, request.path)
except exceptions.Http404:
pass
if settings.SEND_BROKEN_LINK_EMAILS:
# If the referrer was from an internal link or a non-search-engine site,
# send a note to the managers.

View File

@ -1,6 +1,6 @@
import base64, md5, random, sys
import cPickle as pickle
from django.core import meta, validators
from django.core import meta
from django.utils.translation import gettext_lazy as _
class Site(meta.Model):
@ -63,56 +63,6 @@ class ContentType(meta.Model):
"""
return self.get_model_module().get_object(**kwargs)
class Redirect(meta.Model):
site = meta.ForeignKey(Site, radio_admin=meta.VERTICAL)
old_path = meta.CharField(_('redirect from'), maxlength=200, db_index=True,
help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))
new_path = meta.CharField(_('redirect to'), maxlength=200, blank=True,
help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))
class META:
verbose_name = _('redirect')
verbose_name_plural = _('redirects')
db_table = 'redirects'
unique_together=(('site', 'old_path'),)
ordering = ('old_path',)
admin = meta.Admin(
list_filter = ('site',),
search_fields = ('old_path', 'new_path'),
)
def __repr__(self):
return "%s ---> %s" % (self.old_path, self.new_path)
class FlatFile(meta.Model):
url = meta.CharField(_('URL'), maxlength=100, validator_list=[validators.isAlphaNumericURL],
help_text=_("Example: '/about/contact/'. Make sure to have leading and trailing slashes."))
title = meta.CharField(_('title'), maxlength=200)
content = meta.TextField(_('content'))
enable_comments = meta.BooleanField(_('enable comments'))
template_name = meta.CharField(_('template name'), maxlength=70, blank=True,
help_text=_("Example: 'flatfiles/contact_page'. If this isn't provided, the system will use 'flatfiles/default'."))
registration_required = meta.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page."))
sites = meta.ManyToManyField(Site)
class META:
db_table = 'flatfiles'
verbose_name = _('flat page')
verbose_name_plural = _('flat pages')
ordering = ('url',)
admin = meta.Admin(
fields = (
(None, {'fields': ('url', 'title', 'content', 'sites')}),
('Advanced options', {'classes': 'collapse', 'fields': ('enable_comments', 'registration_required', 'template_name')}),
),
list_filter = ('sites',),
search_fields = ('url', 'title'),
)
def __repr__(self):
return "%s -- %s" % (self.url, self.title)
def get_absolute_url(self):
return self.url
class Session(meta.Model):
session_key = meta.CharField(_('session key'), maxlength=40, primary_key=True)
session_data = meta.TextField(_('session data'))

View File

@ -4,7 +4,7 @@ from django.models.core import sites, contenttypes
from django.utils import httpwrappers
def shortcut(request, content_type_id, object_id):
"""Redirect to an object's page based on a content-type ID and an object ID"""
"Redirect to an object's page based on a content-type ID and an object ID."
# Look up the object, making sure it's got a get_absolute_url() function.
try:
content_type = contenttypes.get_object(pk=content_type_id)
@ -15,23 +15,23 @@ def shortcut(request, content_type_id, object_id):
absurl = obj.get_absolute_url()
except AttributeError:
raise Http404, "%s objects don't have get_absolute_url() methods" % content_type.name
# Try to figure out the object's domain so we can do a cross-site redirect
# if necessary
# Try to figure out the object's domain, so we can do a cross-site redirect
# if necessary.
# If the object actually defines a domain, we're done.
if absurl.startswith('http://'):
return httpwrappers.HttpResponseRedirect(absurl)
object_domain = None
# Next, look for an many-to-many relationship to sites
if hasattr(obj, 'get_site_list'):
site_list = obj.get_site_list()
if site_list:
object_domain = site_list[0].domain
# Next, look for a many-to-one relationship to sites
# Next, look for a many-to-one relationship to sites
elif hasattr(obj, 'get_site'):
try:
object_domain = obj.get_site().domain
@ -55,34 +55,15 @@ def page_not_found(request):
Templates: `404`
Context: None
"""
from django.models.core import redirects
from django.conf.settings import APPEND_SLASH, SITE_ID
path = request.get_full_path()
try:
r = redirects.get_object(site__id__exact=SITE_ID, old_path__exact=path)
except redirects.RedirectDoesNotExist:
r = None
if r is None and APPEND_SLASH:
# Try removing the trailing slash.
try:
r = redirects.get_object(site__id__exact=SITE_ID, old_path__exact=path[:path.rfind('/')]+path[path.rfind('/')+1:])
except redirects.RedirectDoesNotExist:
pass
if r is not None:
if r == '':
return httpwrappers.HttpResponseGone()
return httpwrappers.HttpResponseRedirect(r.new_path)
t = loader.get_template('404')
c = Context()
return httpwrappers.HttpResponseNotFound(t.render(c))
return httpwrappers.HttpResponseNotFound(t.render(Context()))
def server_error(request):
"""
500 Error handler
500 error handler.
Templates: `500`
Context: None
"""
t = loader.get_template('500')
c = Context()
return httpwrappers.HttpResponseServerError(t.render(c))
return httpwrappers.HttpResponseServerError(t.render(Context()))

114
docs/flatpages.txt Normal file
View File

@ -0,0 +1,114 @@
=================
The flatpages app
=================
Django comes with an optional "flatpages" application. It lets you store simple
"flat" HTML content in a database and handles the management for you.
A flatpage is a simple object with a URL, title and content. Use it for
one-off, special-case pages, such as "About" or "Privacy Policy" pages, that
you want to store in a database but for which you don't want to develop a
custom Django application.
A flatpage can use a custom template or a default, systemwide flatpage
template. It can be associated with one, or multiple, sites.
Here are some examples of flatpages on Django-powered sites:
* http://www.chicagocrime.org/about/
* http://www.lawrence.com/about/contact/
Installation
============
To install the flatpages app, follow these two steps:
1. Add ``"django.contrib.flatpages"`` to your INSTALLED_APPS_ setting.
2. Add ``"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware"``
to your MIDDLEWARE_CLASSES_ setting.
3. Run the command ``django-admin.py install flatpages``.
.. _INSTALLED_APPS: http://www.djangoproject.com/documentation/settings/#installed-apps
.. _MIDDLEWARE_CLASSES: http://www.djangoproject.com/documentation/settings/#middleware-classes
How it works
============
``django-admin.py install flatpages`` creates two tables in your database:
``django_flatpages`` and ``django_flatpages_sites``. ``django_flatpages`` is a
simple lookup table that essentially maps a URL to a title and bunch of text
content. ``django_flatpages_sites`` associates a flatpage with a site.
The ``FlatpageFallbackMiddleware`` does all of the work. Each time any Django
application raises a 404 error, this middleware checks the flatpages database
for the requested URL as a last resort. Specifically, it checks for a flatpage
with the given URL with a site ID that corresponds to the SITE_ID_ setting.
If it finds a match, it follows this algorithm:
* If the flatpage has a custom template, it loads that template. Otherwise,
it loads the template ``flatpages/default``.
* It passes that template a single context variable, ``flatpage``, which is
the flatpage object. It uses DjangoContext_ in rendering the template.
If it doesn't find a match, the request continues to be processed as usual.
The middleware only gets activated for 404s -- not for 500s or responses of any
other status code.
Note that the order of ``MIDDLEWARE_CLASSES`` matters. Generally, you can put
``FlatpageFallbackMiddleware`` at the end of the list, because it's a last
resort.
For more on middleware, read the `middleware docs`_.
.. _SITE_ID: http://www.djangoproject.com/documentation/settings/#site-id
.. _DjangoContext: http://www.djangoproject.com/documentation/templates_python/#subclassing-context-djangocontext
.. _middleware docs: http://www.djangoproject.com/documentation/middleware/
How to add, change and delete flatpages
=======================================
Via the admin interface
-----------------------
If you've activated the automatic Django admin interface, you should see a
"Flatpages" section on the admin index page. Edit flatpages as you edit any
other object in the system.
Via the Python API
------------------
Flatpages are represented by a standard `Django model`_, which lives in
`django/contrib/flatpages/models/flatpages.py`_. You can access flatpage
objects via the `Django database API`_.
.. _Django model: http://www.djangoproject.com/documentation/model_api/
.. _django/contrib/flatpages/models/flatpages.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/models/flatpages.py
.. _Django database API: http://www.djangoproject.com/documentation/db_api/
Flatpage templates
==================
By default, flatpages are rendered via the template ``flatpages/default``, but
you can override that for a particular flatpage.
Creating the ``flatpages/default`` template is your responsibility; in your
template directory, just create a ``flatpages`` directory containing a file
``default.html``.
Flatpage templates are passed a single context variable, ``flatpage``, which is
the flatpage object.
Here's a sample ``flatpages/default`` template::
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content }}
</body>
</html>

View File

@ -69,10 +69,7 @@ following names:
* ``sites``
* ``packages``
* ``content_types``
* ``redirects``
* ``flatfiles``
* ``core_sessions``
* ``flatfiles_sites``
* ``auth_permissions``
* ``auth_groups``
* ``auth_users``

View File

@ -27,7 +27,9 @@ name. For example, here's the default ``MIDDLEWARE_CLASSES`` created by
"django.middleware.doc.XViewMiddleware",
)
Django applies middleware in the order it's defined in ``MIDDLEWARE_CLASSES``.
Django applies middleware in the order it's defined in ``MIDDLEWARE_CLASSES``,
except in the case of response and exception middleware, which is applied in
reverse order.
A Django installation doesn't require any middleware -- e.g.,
``MIDDLEWARE_CLASSES`` can be empty, if you'd like -- but it's strongly
@ -70,10 +72,6 @@ Adds a few conveniences for perfectionists:
MD5-hashing the page content, and it'll take care of sending
``Not Modified`` responses, if appropriate.
* Handles flat pages. Every time Django encounters a 404 -- either within
a view or as a result of no URLconfs matching -- it will check the
database of flat pages based on the current URL.
django.middleware.doc.XViewMiddleware
-------------------------------------

View File

@ -831,7 +831,7 @@ object, which takes the following parameters. All are optional.
"click to expand" link. Fieldsets with the ``wide`` style will be
given extra horizontal space.
For example (taken from the ``core.flatfiles`` model)::
For example (taken from the ``django.contrib.flatpages`` model)::
fields = (
(None, {

72
docs/redirects.txt Normal file
View File

@ -0,0 +1,72 @@
=================
The redirects app
=================
Django comes with an optional redirects application. It lets you store simple
redirects in a database and handles the redirecting for you.
Installation
============
To install the redirects app, follow these two steps:
1. Add ``"django.contrib.redirects"`` to your INSTALLED_APPS_ setting.
2. Add ``"django.contrib.redirects.middleware.RedirectFallbackMiddleware"``
to your MIDDLEWARE_CLASSES_ setting.
3. Run the command ``django-admin.py install redirects``.
.. _INSTALLED_APPS: http://www.djangoproject.com/documentation/settings/#installed-apps
.. _MIDDLEWARE_CLASSES: http://www.djangoproject.com/documentation/settings/#middleware-classes
How it works
============
``django-admin.py install redirects`` creates a ``django_redirects`` table in
your database. This is a simple lookup table with ``site_id``, ``old_path`` and
``new_path`` fields.
The ``RedirectFallbackMiddleware`` does all of the work. Each time any Django
application raises a 404 error, this middleware checks the redirects database
for the requested URL as a last resort. Specifically, it checks for a redirect
with the given ``old_path`` with a site ID that corresponds to the SITE_ID_
setting.
* If it finds a match, and ``new_path`` is not empty, it redirects to
``new_path``.
* If it finds a match, and ``new_path`` is empty, it sends a 410 ("Gone")
HTTP header and empty (content-less) response.
* If it doesn't find a match, the request continues to be processed as
usual.
The middleware only gets activated for 404s -- not for 500s or responses of any
other status code.
Note that the order of ``MIDDLEWARE_CLASSES`` matters. Generally, you can put
``RedirectFallbackMiddleware`` at the end of the list, because it's a last
resort.
For more on middleware, read the `middleware docs`_.
.. _SITE_ID: http://www.djangoproject.com/documentation/settings/#site-id
.. _middleware docs: http://www.djangoproject.com/documentation/middleware/
How to add, change and delete redirects
=======================================
Via the admin interface
-----------------------
If you've activated the automatic Django admin interface, you should see a
"Redirects" section on the admin index page. Edit redirects as you edit any
other object in the system.
Via the Python API
------------------
Redirects are represented by a standard `Django model`_, which lives in
`django/contrib/redirects/models/redirects.py`_. You can access redirect
objects via the `Django database API`_.
.. _Django model: http://www.djangoproject.com/documentation/model_api/
.. _django/contrib/redirects/models/redirects.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/redirects/models/redirects.py
.. _Django database API: http://www.djangoproject.com/documentation/db_api/

View File

@ -358,6 +358,17 @@ Default: ``('/cgi-bin/', '/_vti_bin', '/_vti_inf')``
A tuple of strings that specify beginnings of URLs that should be ignored by
the 404 e-mailer. See ``SEND_BROKEN_LINK_EMAILS`` and ``IGNORABLE_404_ENDS``.
INSTALLED_APPS
--------------
Default: Not defined
A tuple of strings designating all applications that are enabled in this Django
installation. Each string should be a full Python path to a Python package that
contains a Django application, as created by `django-admin.py startapp`_.
.. _django-admin.py startapp: http://www.djangoproject.com/documentation/django_admin/#startapp-appname
INTERNAL_IPS
------------
@ -488,6 +499,15 @@ See the `session docs`_.
``'hotclub'`` is a reference to the Hot Club of France, the band Django
Reinhardt played in.
SITE_ID
-------
Default: Not defined
The ID, as an integer, of the current site in the ``sites`` database. This is
used so that application data can hook into specific site(s) and a single
database can manage content for multiple sites.
TEMPLATE_DIRS
-------------
@ -542,14 +562,6 @@ A boolean that specifies whether to output the "Etag" header. This saves
bandwidth but slows down performance. This is only used if ``CommonMiddleware``
is installed (see the `middleware docs`_).
USE_FLAT_PAGES
--------------
Default: ``True``
Whether to check the flat-pages table as a last resort for all 404 errors. This
is only used if ``CommonMiddleware`` is installed (see the `middleware docs`_).
.. _cache docs: http://www.djangoproject.com/documentation/cache/
.. _middleware docs: http://www.djangoproject.com/documentation/middleware/
.. _session docs: http://www.djangoproject.com/documentation/sessions/

View File

@ -56,7 +56,6 @@ module that will be used for the entire site. Here's the URLconf for the
(r'^documentation/', include('django_website.apps.docs.urls.docs')),
(r'^comments/', include('django.contrib.comments.urls.comments')),
(r'^rss/', include('django.conf.urls.rss')),
(r'', include('django.conf.urls.flatfiles')),
)
Note that an included URLconf receives any captured parameters from parent