1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

multi-auth: Merged to [2997]

git-svn-id: http://code.djangoproject.com/svn/django/branches/multi-auth@2998 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Joseph Kocherhans 2006-05-28 21:27:07 +00:00
parent 681763a29c
commit aeb807989f
60 changed files with 4749 additions and 2601 deletions

View File

@ -65,6 +65,7 @@ answer newbie questions, and generally made Django that much better:
Robert Rock Howard <http://djangomojo.com/> Robert Rock Howard <http://djangomojo.com/>
Jason Huggins <http://www.jrandolph.com/blog/> Jason Huggins <http://www.jrandolph.com/blog/>
Michael Josephson <http://www.sdjournal.com/> Michael Josephson <http://www.sdjournal.com/>
jpellerin@gmail.com
junzhang.jn@gmail.com junzhang.jn@gmail.com
Russell Keith-Magee <freakboy@iinet.net.au> Russell Keith-Magee <freakboy@iinet.net.au>
Garth Kidd <http://www.deadlybloodyserious.com/> Garth Kidd <http://www.deadlybloodyserious.com/>
@ -93,6 +94,7 @@ answer newbie questions, and generally made Django that much better:
oggie rob <oz.robharvey@gmail.com> oggie rob <oz.robharvey@gmail.com>
pgross@thoughtworks.com pgross@thoughtworks.com
phaedo <http://phaedo.cx/> phaedo <http://phaedo.cx/>
phil@produxion.net
Gustavo Picon Gustavo Picon
Luke Plant <http://lukeplant.me.uk/> Luke Plant <http://lukeplant.me.uk/>
plisk plisk

View File

@ -42,6 +42,7 @@ LANGUAGES = (
('el', _('Greek')), ('el', _('Greek')),
('en', _('English')), ('en', _('English')),
('es', _('Spanish')), ('es', _('Spanish')),
('es_AR', _('Argentinean Spanish')),
('fr', _('French')), ('fr', _('French')),
('gl', _('Galician')), ('gl', _('Galician')),
('hu', _('Hungarian')), ('hu', _('Hungarian')),
@ -218,12 +219,12 @@ TRANSACTIONS_MANAGED = False
# this middleware classes will be applied in the order given, and in the # this middleware classes will be applied in the order given, and in the
# response phase the middleware will be applied in reverse order. # response phase the middleware will be applied in reverse order.
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
"django.contrib.sessions.middleware.SessionMiddleware", 'django.contrib.sessions.middleware.SessionMiddleware',
"django.contrib.auth.middleware.AuthenticationMiddleware", 'django.contrib.auth.middleware.AuthenticationMiddleware',
# "django.middleware.http.ConditionalGetMiddleware", # 'django.middleware.http.ConditionalGetMiddleware',
# "django.middleware.gzip.GZipMiddleware", # 'django.middleware.gzip.GZipMiddleware',
"django.middleware.common.CommonMiddleware", 'django.middleware.common.CommonMiddleware',
"django.middleware.doc.XViewMiddleware", 'django.middleware.doc.XViewMiddleware',
) )
############ ############

File diff suppressed because it is too large Load Diff

View File

@ -18,81 +18,81 @@ msgstr ""
#: contrib/comments/models.py:67 contrib/comments/models.py:166 #: contrib/comments/models.py:67 contrib/comments/models.py:166
msgid "object ID" msgid "object ID"
msgstr "ID αντικειμένου" msgstr "ID αντικειμένου"
#: contrib/comments/models.py:68 #: contrib/comments/models.py:68
msgid "headline" msgid "headline"
msgstr "Επικεφαλίδα" msgstr "Επικεφαλίδα"
#: contrib/comments/models.py:69 contrib/comments/models.py:90 #: contrib/comments/models.py:69 contrib/comments/models.py:90
#: contrib/comments/models.py:167 #: contrib/comments/models.py:167
msgid "comment" msgid "comment"
msgstr "σχόλιο" msgstr "σχόλιο"
#: contrib/comments/models.py:70 #: contrib/comments/models.py:70
msgid "rating #1" msgid "rating #1"
msgstr "κατάταξη #1" msgstr "κατάταξη #1"
#: contrib/comments/models.py:71 #: contrib/comments/models.py:71
msgid "rating #2" msgid "rating #2"
msgstr "βαθμολογία #2" msgstr "βαθμολογία #2"
#: contrib/comments/models.py:72 #: contrib/comments/models.py:72
msgid "rating #3" msgid "rating #3"
msgstr "βαθμολογία #3" msgstr "βαθμολογία #3"
#: contrib/comments/models.py:73 #: contrib/comments/models.py:73
msgid "rating #4" msgid "rating #4"
msgstr "βαθμολογία #4" msgstr "βαθμολογία #4"
#: contrib/comments/models.py:74 #: contrib/comments/models.py:74
msgid "rating #5" msgid "rating #5"
msgstr "βαθμολογία #5" msgstr "βαθμολογία #5"
#: contrib/comments/models.py:75 #: contrib/comments/models.py:75
msgid "rating #6" msgid "rating #6"
msgstr "βαθμολογία #6" msgstr "βαθμολογία #6"
#: contrib/comments/models.py:76 #: contrib/comments/models.py:76
msgid "rating #7" msgid "rating #7"
msgstr "βαθμολογία #7" msgstr "βαθμολογία #7"
#: contrib/comments/models.py:77 #: contrib/comments/models.py:77
msgid "rating #8" msgid "rating #8"
msgstr "βαθμολογία #8" msgstr "βαθμολογία #8"
#: contrib/comments/models.py:82 #: contrib/comments/models.py:82
msgid "is valid rating" msgid "is valid rating"
msgstr "είναι έγκυρη βαθμολογία" msgstr "είναι έγκυρη βαθμολογία"
#: contrib/comments/models.py:83 contrib/comments/models.py:169 #: contrib/comments/models.py:83 contrib/comments/models.py:169
msgid "date/time submitted" msgid "date/time submitted"
msgstr "ημερομηνία/ώρα υποβολής" msgstr "ημερομηνία/ώρα υποβολής"
#: contrib/comments/models.py:84 contrib/comments/models.py:170 #: contrib/comments/models.py:84 contrib/comments/models.py:170
msgid "is public" msgid "is public"
msgstr "είναι δημόσιο" msgstr "είναι δημόσιο"
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 #: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
msgid "IP address" msgid "IP address"
msgstr "IP διεύθυνση" msgstr "IP διεύθυνση"
#: contrib/comments/models.py:86 #: contrib/comments/models.py:86
msgid "is removed" msgid "is removed"
msgstr "είναι διεγραμμένο" msgstr "είναι διεγραμμένο"
#: contrib/comments/models.py:86 #: contrib/comments/models.py:86
msgid "" msgid ""
"Check this box if the comment is inappropriate. A \"This comment has been " "Check this box if the comment is inappropriate. A \"This comment has been "
"removed\" message will be displayed instead." "removed\" message will be displayed instead."
msgstr "" msgstr ""
"Σημειώστε αυτό το κουτί εάν το σχόλιο είναι ανάρμοστο. Ένα Αυτό το σχόλιο " "Σημειώστε αυτό το κουτί εάν το σχόλιο είναι ανάρμοστο. Ένα Αυτό το σχόλιο "
"εσβήσθει\" μήνυμα θα εμφανιστεί αντί αυτού." "εσβήσθει\" μήνυμα θα εμφανιστεί αντί αυτού."
#: contrib/comments/models.py:91 #: contrib/comments/models.py:91
#, fuzzy #, fuzzy
msgid "comments" msgid "comments"
msgstr "σχόλιο" msgstr "σχόλιο"
#: contrib/comments/models.py:131 contrib/comments/models.py:207 #: contrib/comments/models.py:131 contrib/comments/models.py:207
msgid "Content object" msgid "Content object"
@ -110,38 +110,38 @@ msgstr ""
#: contrib/comments/models.py:168 #: contrib/comments/models.py:168
msgid "person's name" msgid "person's name"
msgstr "όνομα ατόμου" msgstr "όνομα ατόμου"
#: contrib/comments/models.py:171 #: contrib/comments/models.py:171
msgid "ip address" msgid "ip address"
msgstr "ip διεύθυνση" msgstr "ip διεύθυνση"
#: contrib/comments/models.py:173 #: contrib/comments/models.py:173
msgid "approved by staff" msgid "approved by staff"
msgstr "εγκεκριμένο από το προσωπικό" msgstr "εγκεκριμένο από το προσωπικό"
#: contrib/comments/models.py:176 #: contrib/comments/models.py:176
#, fuzzy #, fuzzy
msgid "free comment" msgid "free comment"
msgstr "Ελεύθερο σχόλιο" msgstr "Ελεύθερο σχόλιο"
#: contrib/comments/models.py:177 #: contrib/comments/models.py:177
#, fuzzy #, fuzzy
msgid "free comments" msgid "free comments"
msgstr "Ελεύθερα σχόλια" msgstr "Ελεύθερα σχόλια"
#: contrib/comments/models.py:233 #: contrib/comments/models.py:233
msgid "score" msgid "score"
msgstr "βαθμολογία" msgstr "βαθμολογία"
#: contrib/comments/models.py:234 #: contrib/comments/models.py:234
msgid "score date" msgid "score date"
msgstr "ημερομηνία βαθμολογίας" msgstr "ημερομηνία βαθμολογίας"
#: contrib/comments/models.py:237 #: contrib/comments/models.py:237
#, fuzzy #, fuzzy
msgid "karma score" msgid "karma score"
msgstr "βαθμολογία" msgstr "βαθμολογία"
#: contrib/comments/models.py:238 #: contrib/comments/models.py:238
msgid "karma scores" msgid "karma scores"
@ -159,9 +159,9 @@ msgid ""
"\n" "\n"
"%(text)s" "%(text)s"
msgstr "" msgstr ""
"Αυτο το σχόλιο σημειώθει απο %(χρήστη)ες\n" "Αυτο το σχόλιο σημειώθει απο %(χρήστη)ες\n"
"\n" "\n"
"%(κείμενο)α" "%(κείμενο)α"
#: contrib/comments/models.py:265 #: contrib/comments/models.py:265
msgid "flag date" msgid "flag date"
@ -182,7 +182,7 @@ msgstr ""
#: contrib/comments/models.py:278 #: contrib/comments/models.py:278
msgid "deletion date" msgid "deletion date"
msgstr "ημερομηνία διαγραφής" msgstr "ημερομηνία διαγραφής"
#: contrib/comments/models.py:280 #: contrib/comments/models.py:280
msgid "moderator deletion" msgid "moderator deletion"
@ -199,7 +199,7 @@ msgstr ""
#: contrib/comments/views/karma.py:19 #: contrib/comments/views/karma.py:19
msgid "Anonymous users cannot vote" msgid "Anonymous users cannot vote"
msgstr "Ανώνυμοι χρήστες δέν μπορούν να ψηφήσουν" msgstr "Ανώνυμοι χρήστες δέν μπορούν να ψηφήσουν"
#: contrib/comments/views/karma.py:23 #: contrib/comments/views/karma.py:23
msgid "Invalid comment ID" msgid "Invalid comment ID"
@ -212,7 +212,7 @@ msgstr ""
#: contrib/comments/views/comments.py:28 #: contrib/comments/views/comments.py:28
msgid "" msgid ""
"This rating is required because you've entered at least one other rating." "This rating is required because you've entered at least one other rating."
msgstr "Αυτή η βαθμολογία απαιτείται επειδή τουλάχιστον ακόμα μια βαθμολογία" msgstr "Αυτή η βαθμολογία απαιτείται επειδή τουλάχιστον ακόμα μια βαθμολογία"
#: contrib/comments/views/comments.py:112 #: contrib/comments/views/comments.py:112
#, python-format #, python-format
@ -245,7 +245,7 @@ msgstr ""
#: contrib/comments/views/comments.py:193 #: contrib/comments/views/comments.py:193
#: contrib/comments/views/comments.py:284 #: contrib/comments/views/comments.py:284
msgid "One or more of the required fields wasn't submitted" msgid "One or more of the required fields wasn't submitted"
msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υποβλίθει" msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υποβλίθει"
#: contrib/comments/views/comments.py:197 #: contrib/comments/views/comments.py:197
#: contrib/comments/views/comments.py:286 #: contrib/comments/views/comments.py:286
@ -273,11 +273,11 @@ msgstr ""
#: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:6
#: contrib/admin/templates/admin/login.html:20 #: contrib/admin/templates/admin/login.html:20
msgid "Password:" msgid "Password:"
msgstr "Κωδικός" msgstr "Κωδικός"
#: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:6
msgid "Forgotten your password?" msgid "Forgotten your password?"
msgstr "Ξεχάσατε τον κωδικό σας;" msgstr "Ξεχάσατε τον κωδικό σας;"
#: contrib/comments/templates/comments/form.html:8 #: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/object_history.html:3
@ -321,7 +321,7 @@ msgstr ""
#: contrib/comments/templates/comments/form.html:27 #: contrib/comments/templates/comments/form.html:27
#: contrib/comments/templates/comments/freeform.html:5 #: contrib/comments/templates/comments/freeform.html:5
msgid "Comment:" msgid "Comment:"
msgstr "Σχόλιο:" msgstr "Σχόλιο:"
#: contrib/comments/templates/comments/form.html:32 #: contrib/comments/templates/comments/form.html:32
#: contrib/comments/templates/comments/freeform.html:9 #: contrib/comments/templates/comments/freeform.html:9
@ -350,7 +350,7 @@ msgstr ""
#: contrib/admin/filterspecs.py:110 #: contrib/admin/filterspecs.py:110
msgid "Today" msgid "Today"
msgstr "Σήμερα" msgstr "Σήμερα"
#: contrib/admin/filterspecs.py:113 #: contrib/admin/filterspecs.py:113
msgid "Past 7 days" msgid "Past 7 days"
@ -358,23 +358,23 @@ msgstr ""
#: contrib/admin/filterspecs.py:115 #: contrib/admin/filterspecs.py:115
msgid "This month" msgid "This month"
msgstr "Αυτό το μήνα" msgstr "Αυτό το μήνα"
#: contrib/admin/filterspecs.py:117 #: contrib/admin/filterspecs.py:117
msgid "This year" msgid "This year"
msgstr "Αυτό το χρόνο" msgstr "Αυτό το χρόνο"
#: contrib/admin/filterspecs.py:143 #: contrib/admin/filterspecs.py:143
msgid "Yes" msgid "Yes"
msgstr "Ναί" msgstr "Ναί"
#: contrib/admin/filterspecs.py:143 #: contrib/admin/filterspecs.py:143
msgid "No" msgid "No"
msgstr "Όχι" msgstr "Όχι"
#: contrib/admin/filterspecs.py:150 #: contrib/admin/filterspecs.py:150
msgid "Unknown" msgid "Unknown"
msgstr "’γνωστο" msgstr "’γνωστο"
#: contrib/admin/models.py:16 #: contrib/admin/models.py:16
msgid "action time" msgid "action time"
@ -394,7 +394,7 @@ msgstr ""
#: contrib/admin/models.py:22 #: contrib/admin/models.py:22
msgid "change message" msgid "change message"
msgstr "αλλάξτε το μήνυμα" msgstr "αλλάξτε το μήνυμα"
#: contrib/admin/models.py:25 #: contrib/admin/models.py:25
msgid "log entry" msgid "log entry"
@ -406,7 +406,7 @@ msgstr ""
#: contrib/admin/templatetags/admin_list.py:228 #: contrib/admin/templatetags/admin_list.py:228
msgid "All dates" msgid "All dates"
msgstr "Όλες οι ημερομηνίες" msgstr "Όλες οι ημερομηνίες"
#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 #: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
#: contrib/auth/forms.py:41 #: contrib/auth/forms.py:41
@ -414,45 +414,45 @@ msgid ""
"Please enter a correct username and password. Note that both fields are case-" "Please enter a correct username and password. Note that both fields are case-"
"sensitive." "sensitive."
msgstr "" msgstr ""
"Παρακαλώ εισάγετε ένα σωστό όνομα χρήστη και κωδικό. Να σημειωθεί ότι και τα " "Παρακαλώ εισάγετε ένα σωστό όνομα χρήστη και κωδικό. Να σημειωθεί ότι και τα "
"δύο πεδία είναι case-sensitive." "δύο πεδία είναι case-sensitive."
#: contrib/admin/views/decorators.py:23 #: contrib/admin/views/decorators.py:23
#: contrib/admin/templates/admin/login.html:25 #: contrib/admin/templates/admin/login.html:25
msgid "Log in" msgid "Log in"
msgstr "Συνδεθείτε" msgstr "Συνδεθείτε"
#: contrib/admin/views/decorators.py:61 #: contrib/admin/views/decorators.py:61
msgid "" msgid ""
"Please log in again, because your session has expired. Don't worry: Your " "Please log in again, because your session has expired. Don't worry: Your "
"submission has been saved." "submission has been saved."
msgstr "" msgstr ""
"Παρακαλώ ξανασυνδεθείτε, γιατί η session σας έληξε. Μην ανησυχείτε: Η " "Παρακαλώ ξανασυνδεθείτε, γιατί η session σας έληξε. Μην ανησυχείτε: Η "
"submission σας έχει αποθηκευτεί." "submission σας έχει αποθηκευτεί."
#: contrib/admin/views/decorators.py:68 #: contrib/admin/views/decorators.py:68
msgid "" msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable " "Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again." "cookies, reload this page, and try again."
msgstr "" msgstr ""
"Απ'οτι φαίνεται, ο φυλλομετρητής σας δεν έχει ρυθμιστεί να δέχεται cookies. " "Απ'οτι φαίνεται, ο φυλλομετρητής σας δεν έχει ρυθμιστεί να δέχεται cookies. "
"Παρακαλώ ενεργοποιείστε τα cookies, ξαναφορτώστε αυτή την σελίδα, και " "Παρακαλώ ενεργοποιείστε τα cookies, ξαναφορτώστε αυτή την σελίδα, και "
"δοκιμάστε ξανά." "δοκιμάστε ξανά."
#: contrib/admin/views/decorators.py:82 #: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character." msgid "Usernames cannot contain the '@' character."
msgstr "Τα ονόματα των Χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'." msgstr "Τα ονόματα των Χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'."
#: contrib/admin/views/decorators.py:84 #: contrib/admin/views/decorators.py:84
#, python-format #, python-format
msgid "Your e-mail address is not your username. Try '%s' instead." msgid "Your e-mail address is not your username. Try '%s' instead."
msgstr "" msgstr ""
"Η ηλεκτρονική σας διεύθυνση δεν είναι το ονόμα χρήστη σας. Δοκιμάστε '%s' " "Η ηλεκτρονική σας διεύθυνση δεν είναι το ονόμα χρήστη σας. Δοκιμάστε '%s' "
"έναντι αυτού." "έναντι αυτού."
#: contrib/admin/views/main.py:226 #: contrib/admin/views/main.py:226
msgid "Site administration" msgid "Site administration"
msgstr "Διαχείριση του Διαδυκτιακού χώρου" msgstr "Διαχείριση του Διαδυκτιακού χώρου"
#: contrib/admin/views/main.py:260 #: contrib/admin/views/main.py:260
#, python-format #, python-format
@ -466,7 +466,7 @@ msgstr ""
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format #, python-format
msgid "You may add another %s below." msgid "You may add another %s below."
msgstr "Μπορείτε να προσθέσετε ακόμα ένα %s απο κάτω." msgstr "Μπορείτε να προσθέσετε ακόμα ένα %s απο κάτω."
#: contrib/admin/views/main.py:290 #: contrib/admin/views/main.py:290
#, python-format #, python-format
@ -481,7 +481,7 @@ msgstr ""
#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
#: contrib/admin/views/main.py:340 #: contrib/admin/views/main.py:340
msgid "and" msgid "and"
msgstr "και" msgstr "και"
#: contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:338
#, python-format #, python-format
@ -530,7 +530,7 @@ msgstr ""
#: contrib/admin/views/main.py:511 #: contrib/admin/views/main.py:511
msgid "Are you sure?" msgid "Are you sure?"
msgstr "Είστε σίγουρος;" msgstr "Είστε σίγουρος;"
#: contrib/admin/views/main.py:533 #: contrib/admin/views/main.py:533
#, python-format #, python-format
@ -551,11 +551,11 @@ msgstr ""
#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 #: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
msgid "Integer" msgid "Integer"
msgstr "Ακέραιος" msgstr "Ακέραιος"
#: contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:278
msgid "Boolean (Either True or False)" msgid "Boolean (Either True or False)"
msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)" msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
#, python-format #, python-format
@ -568,15 +568,15 @@ msgstr ""
#: contrib/admin/views/doc.py:281 #: contrib/admin/views/doc.py:281
msgid "Date (without time)" msgid "Date (without time)"
msgstr "Ημερομηνία (χωρίς την ώρα)" msgstr "Ημερομηνία (χωρίς την ώρα)"
#: contrib/admin/views/doc.py:282 #: contrib/admin/views/doc.py:282
msgid "Date (with time)" msgid "Date (with time)"
msgstr "Ημερομηνία (με την ώρα)" msgstr "Ημερομηνία (με την ώρα)"
#: contrib/admin/views/doc.py:283 #: contrib/admin/views/doc.py:283
msgid "E-mail address" msgid "E-mail address"
msgstr "Ηλεκτρονική διεύθυνση" msgstr "Ηλεκτρονική διεύθυνση"
#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
msgid "File path" msgid "File path"
@ -584,7 +584,7 @@ msgstr ""
#: contrib/admin/views/doc.py:285 #: contrib/admin/views/doc.py:285
msgid "Decimal number" msgid "Decimal number"
msgstr "Δεκαδικός αριθμός" msgstr "Δεκαδικός αριθμός"
#: contrib/admin/views/doc.py:291 #: contrib/admin/views/doc.py:291
msgid "Boolean (Either True, False or None)" msgid "Boolean (Either True, False or None)"
@ -596,15 +596,15 @@ msgstr ""
#: contrib/admin/views/doc.py:293 #: contrib/admin/views/doc.py:293
msgid "Phone number" msgid "Phone number"
msgstr "Αριθμός τηλεφώνου" msgstr "Αριθμός τηλεφώνου"
#: contrib/admin/views/doc.py:298 #: contrib/admin/views/doc.py:298
msgid "Text" msgid "Text"
msgstr "Κείμενο" msgstr "Κείμενο"
#: contrib/admin/views/doc.py:299 #: contrib/admin/views/doc.py:299
msgid "Time" msgid "Time"
msgstr "Ώρα" msgstr "Ώρα"
#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 #: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
msgid "URL" msgid "URL"
@ -647,7 +647,7 @@ msgstr ""
#: contrib/admin/templates/admin_doc/index.html:4 #: contrib/admin/templates/admin_doc/index.html:4
#: contrib/admin/templates/admin_doc/model_index.html:5 #: contrib/admin/templates/admin_doc/model_index.html:5
msgid "Change password" msgid "Change password"
msgstr "Αλλαγή κωδικού" msgstr "Αλλαγή κωδικού"
#: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/object_history.html:5
#: contrib/admin/templates/admin/500.html:4 #: contrib/admin/templates/admin/500.html:4
@ -675,7 +675,7 @@ msgstr ""
#: contrib/admin/templates/admin/object_history.html:19 #: contrib/admin/templates/admin/object_history.html:19
msgid "User" msgid "User"
msgstr "Χρήστης" msgstr "Χρήστης"
#: contrib/admin/templates/admin/object_history.html:20 #: contrib/admin/templates/admin/object_history.html:20
msgid "Action" msgid "Action"
@ -693,7 +693,7 @@ msgstr ""
#: contrib/admin/templates/admin/base_site.html:4 #: contrib/admin/templates/admin/base_site.html:4
msgid "Django site admin" msgid "Django site admin"
msgstr "Διαχειριστής ιστοσελίδας Django" msgstr "Διαχειριστής ιστοσελίδας Django"
#: contrib/admin/templates/admin/base_site.html:7 #: contrib/admin/templates/admin/base_site.html:7
msgid "Django administration" msgid "Django administration"
@ -750,7 +750,7 @@ msgstr ""
#: contrib/admin/templates/admin/index.html:53 #: contrib/admin/templates/admin/index.html:53
msgid "My Actions" msgid "My Actions"
msgstr "Οι πράξεις μου" msgstr "Οι πράξεις μου"
#: contrib/admin/templates/admin/index.html:57 #: contrib/admin/templates/admin/index.html:57
msgid "None available" msgid "None available"
@ -767,7 +767,7 @@ msgstr ""
#: contrib/admin/templates/admin/base.html:23 #: contrib/admin/templates/admin/base.html:23
msgid "Welcome," msgid "Welcome,"
msgstr "Καλωσήρθατε," msgstr "Καλωσήρθατε,"
#: contrib/admin/templates/admin/delete_confirmation.html:9 #: contrib/admin/templates/admin/delete_confirmation.html:9
#: contrib/admin/templates/admin/submit_line.html:3 #: contrib/admin/templates/admin/submit_line.html:3
@ -791,7 +791,7 @@ msgstr ""
#: contrib/admin/templates/admin/delete_confirmation.html:26 #: contrib/admin/templates/admin/delete_confirmation.html:26
msgid "Yes, I'm sure" msgid "Yes, I'm sure"
msgstr "Ναι, είμαι σίγουρος" msgstr "Ναι, είμαι σίγουρος"
#: contrib/admin/templates/admin/filter.html:2 #: contrib/admin/templates/admin/filter.html:2
#, python-format #, python-format
@ -834,7 +834,7 @@ msgstr ""
#: contrib/admin/templates/admin/submit_line.html:7 #: contrib/admin/templates/admin/submit_line.html:7
msgid "Save" msgid "Save"
msgstr "Αποθήκευση" msgstr "Αποθήκευση"
#: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_done.html:4
#: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:4
@ -850,7 +850,7 @@ msgstr ""
#: contrib/admin/templates/registration/password_change_done.html:12 #: contrib/admin/templates/registration/password_change_done.html:12
msgid "Your password was changed." msgid "Your password was changed."
msgstr "Ο κωδίκός σας άλλαξε." msgstr "Ο κωδίκός σας άλλαξε."
#: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4
#: contrib/admin/templates/registration/password_reset_form.html:6 #: contrib/admin/templates/registration/password_reset_form.html:6
@ -876,7 +876,7 @@ msgstr ""
#: contrib/admin/templates/registration/logged_out.html:8 #: contrib/admin/templates/registration/logged_out.html:8
msgid "Thanks for spending some quality time with the Web site today." msgid "Thanks for spending some quality time with the Web site today."
msgstr "" msgstr ""
"Ευχαριστούμε που διαθέσατε χρόνο στο να βελτίωσετε την ιστοσελίδα σήμερα." "Ευχαριστούμε που διαθέσατε χρόνο στο να βελτίωσετε την ιστοσελίδα σήμερα."
#: contrib/admin/templates/registration/logged_out.html:10 #: contrib/admin/templates/registration/logged_out.html:10
msgid "Log in again" msgid "Log in again"
@ -901,11 +901,11 @@ msgstr ""
#: contrib/admin/templates/registration/password_change_form.html:17 #: contrib/admin/templates/registration/password_change_form.html:17
msgid "Old password:" msgid "Old password:"
msgstr "Παλιός κωδικός:" msgstr "Παλιός κωδικός:"
#: contrib/admin/templates/registration/password_change_form.html:19 #: contrib/admin/templates/registration/password_change_form.html:19
msgid "New password:" msgid "New password:"
msgstr "Νέος κωδικός:" msgstr "Νέος κωδικός:"
#: contrib/admin/templates/registration/password_change_form.html:21 #: contrib/admin/templates/registration/password_change_form.html:21
msgid "Confirm password:" msgid "Confirm password:"
@ -1173,12 +1173,12 @@ msgstr ""
#: contrib/auth/models.py:70 #: contrib/auth/models.py:70
#, fuzzy #, fuzzy
msgid "user" msgid "user"
msgstr "Χρήστης" msgstr "Χρήστης"
#: contrib/auth/models.py:71 #: contrib/auth/models.py:71
#, fuzzy #, fuzzy
msgid "users" msgid "users"
msgstr "Χρήστης" msgstr "Χρήστης"
#: contrib/auth/models.py:76 #: contrib/auth/models.py:76
msgid "Personal info" msgid "Personal info"
@ -1199,15 +1199,15 @@ msgstr ""
#: contrib/auth/models.py:219 #: contrib/auth/models.py:219
#, fuzzy #, fuzzy
msgid "message" msgid "message"
msgstr "αλλάξτε το μήνυμα" msgstr "αλλάξτε το μήνυμα"
#: contrib/auth/forms.py:30 #: contrib/auth/forms.py:30
msgid "" msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are " "Your Web browser doesn't appear to have cookies enabled. Cookies are "
"required for logging in." "required for logging in."
msgstr "" msgstr ""
"Ο φυλλομετρητής σας δεν φαίνεται να έχει ενεργοποιημένα τα cookies. Τα " "Ο φυλλομετρητής σας δεν φαίνεται να έχει ενεργοποιημένα τα cookies. Τα "
"cookies απαιτούνται για να συνδεθείτε" "cookies απαιτούνται για να συνδεθείτε"
#: contrib/contenttypes/models.py:25 #: contrib/contenttypes/models.py:25
msgid "python model class name" msgid "python model class name"
@ -1348,7 +1348,7 @@ msgstr ""
#: utils/dates.py:19 #: utils/dates.py:19
#, fuzzy #, fuzzy
msgid "jan" msgid "jan"
msgstr "και" msgstr "και"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "feb" msgid "feb"
@ -1677,7 +1677,7 @@ msgstr ""
#: core/validators.py:206 core/validators.py:208 #: core/validators.py:206 core/validators.py:208
#, python-format #, python-format
msgid "The URL %s is a broken link." msgid "The URL %s is a broken link."
msgstr "Η διεύθυνση (URL) %s είναι χαλασμένη σύνδεση." msgstr "Η διεύθυνση (URL) %s είναι χαλασμένη σύνδεση."
#: core/validators.py:214 #: core/validators.py:214
msgid "Enter a valid U.S. state abbreviation." msgid "Enter a valid U.S. state abbreviation."
@ -1701,7 +1701,7 @@ msgstr ""
#: core/validators.py:264 core/validators.py:275 #: core/validators.py:264 core/validators.py:275
msgid "Please enter both fields or leave them both empty." msgid "Please enter both fields or leave them both empty."
msgstr "Παρακαλώ συμπληρώστε και τα δύο πεδία ή αφήστε τα και τα δύο άδεια." msgstr "Παρακαλώ συμπληρώστε και τα δύο πεδία ή αφήστε τα και τα δύο άδεια."
#: core/validators.py:282 #: core/validators.py:282
#, python-format #, python-format
@ -1724,7 +1724,7 @@ msgstr ""
#: core/validators.py:347 #: core/validators.py:347
msgid "Please enter a valid decimal number." msgid "Please enter a valid decimal number."
msgstr "Παρακαλώ είσάγετε έναν έγκυρο δεκαδίκο αριθμό." msgstr "Παρακαλώ είσάγετε έναν έγκυρο δεκαδίκο αριθμό."
#: core/validators.py:349 #: core/validators.py:349
#, python-format #, python-format
@ -1745,7 +1745,7 @@ msgstr[1] ""
#: core/validators.py:362 #: core/validators.py:362
#, python-format #, python-format
msgid "Make sure your uploaded file is at least %s bytes big." msgid "Make sure your uploaded file is at least %s bytes big."
msgstr "Σιγουρευτείτε ότι το αρχείου που ανεβάζετε είναι %s bytes τουλάχιστον." msgstr "Σιγουρευτείτε ότι το αρχείου που ανεβάζετε είναι %s bytes τουλάχιστον."
#: core/validators.py:363 #: core/validators.py:363
#, python-format #, python-format
@ -1754,11 +1754,11 @@ msgstr ""
#: core/validators.py:376 #: core/validators.py:376
msgid "The format for this field is wrong." msgid "The format for this field is wrong."
msgstr "Η διάταξη αυτού του πεδίου έιναι λάθος" msgstr "Η διάταξη αυτού του πεδίου έιναι λάθος"
#: core/validators.py:391 #: core/validators.py:391
msgid "This field is invalid." msgid "This field is invalid."
msgstr "Αυτό το πεδίο είναι άκυρο" msgstr "Αυτό το πεδίο είναι άκυρο"
#: core/validators.py:426 #: core/validators.py:426
#, python-format #, python-format
@ -1836,16 +1836,16 @@ msgstr ""
#: db/models/fields/__init__.py:369 #: db/models/fields/__init__.py:369
#, fuzzy #, fuzzy
msgid "This value must be either True or False." msgid "This value must be either True or False."
msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)" msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
#: db/models/fields/__init__.py:385 #: db/models/fields/__init__.py:385
#, fuzzy #, fuzzy
msgid "This field cannot be null." msgid "This field cannot be null."
msgstr "Αυτό το πεδίο είναι άκυρο" msgstr "Αυτό το πεδίο είναι άκυρο"
#: db/models/fields/__init__.py:562 #: db/models/fields/__init__.py:562
msgid "Enter a valid filename." msgid "Enter a valid filename."
msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου" msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου"
#: db/models/fields/related.py:43 #: db/models/fields/related.py:43
#, python-format #, python-format
@ -1855,7 +1855,7 @@ msgstr ""
#: db/models/fields/related.py:579 #: db/models/fields/related.py:579
#, fuzzy #, fuzzy
msgid "Separate multiple IDs with commas." msgid "Separate multiple IDs with commas."
msgstr "Ξεχωρίστε πολλαπλές ΙDs με κόμματα" msgstr "Ξεχωρίστε πολλαπλές ΙDs με κόμματα"
#: db/models/fields/related.py:581 #: db/models/fields/related.py:581
msgid "" msgid ""
@ -1904,10 +1904,10 @@ msgstr ""
#: template/defaultfilters.py:379 #: template/defaultfilters.py:379
msgid "yes,no,maybe" msgid "yes,no,maybe"
msgstr "ναί,όχι,ίσως" msgstr "ναί,όχι,ίσως"
#~ msgid "Comment" #~ msgid "Comment"
#~ msgstr "Σχόλιο" #~ msgstr "Σχόλιο"
#~ msgid "Comments" #~ msgid "Comments"
#~ msgstr "Σχόλια" #~ msgstr "Σχόλια"

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,110 @@
# Argentinean spanish translation for the django-admin JS files, based on
# Spanish translation work by Jorge Gajon.
# Copyright (C)
# This file is distributed under the same license as the PACKAGE package.
# Ramiro Morales <rm0@gmx.net>, 2006.
#
msgid ""
msgstr ""
"Project-Id-Version: Django JavaScript 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-09 11:51+0100\n"
"PO-Revision-Date: 2006-05-16 10:20-0300\n"
"Last-Translator: Ramiro Morales <rm0@gmx.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr "%s disponibles"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr "Selecciona todos"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr "Agregar"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr "Eliminar"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr "%s elegidos"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr "Haga sus elecciones y haga click en "
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr "Elimina todos"
#: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre "
"Noviembre Diciembre"
#: contrib/admin/media/js/dateparse.js:27
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "Domingo Lunes Martes Miércoles Jueves Viernes Sábado"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr "D L M M J V S"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
msgid "Now"
msgstr "Ahora"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
msgid "Clock"
msgstr "Reloj"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
msgid "Choose a time"
msgstr "Elija una hora"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Midnight"
msgstr "Medianoche"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "6 a.m."
msgstr "6 a.m."
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "Noon"
msgstr "Mediodía"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
msgid "Cancel"
msgstr "Cancelar"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
msgid "Today"
msgstr "Hoy"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
msgid "Calendar"
msgstr "Calendario"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
msgid "Yesterday"
msgstr "Ayer"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
msgid "Tomorrow"
msgstr "Mañana"

View File

@ -16,9 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: contrib/comments/models.py:67 contrib/comments/models.py:166 #: contrib/comments/models.py:67 contrib/comments/models.py:166
#, fuzzy
msgid "object ID" msgid "object ID"
msgstr "id de l'objet" msgstr "ID de l'objet"
#: contrib/comments/models.py:68 #: contrib/comments/models.py:68
msgid "headline" msgid "headline"
@ -26,9 +25,8 @@ msgstr "titre"
#: contrib/comments/models.py:69 contrib/comments/models.py:90 #: contrib/comments/models.py:69 contrib/comments/models.py:90
#: contrib/comments/models.py:167 #: contrib/comments/models.py:167
#, fuzzy
msgid "comment" msgid "comment"
msgstr "contenu" msgstr "commentaire"
#: contrib/comments/models.py:70 #: contrib/comments/models.py:70
msgid "rating #1" msgid "rating #1"
@ -75,7 +73,6 @@ msgid "is public"
msgstr "est public" msgstr "est public"
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 #: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
#, fuzzy
msgid "IP address" msgid "IP address"
msgstr "adresse IP" msgstr "adresse IP"
@ -92,14 +89,12 @@ msgstr ""
"commentaire a été supprimé\" sera affiché en lieu et place de celui-ci." "commentaire a été supprimé\" sera affiché en lieu et place de celui-ci."
#: contrib/comments/models.py:91 #: contrib/comments/models.py:91
#, fuzzy
msgid "comments" msgid "comments"
msgstr "contenu" msgstr "commentaires"
#: contrib/comments/models.py:131 contrib/comments/models.py:207 #: contrib/comments/models.py:131 contrib/comments/models.py:207
#, fuzzy
msgid "Content object" msgid "Content object"
msgstr "type de contenu" msgstr "Type de contenu"
#: contrib/comments/models.py:159 #: contrib/comments/models.py:159
#, python-format #, python-format
@ -117,12 +112,10 @@ msgstr ""
"http://%(domain)s%(url)s" "http://%(domain)s%(url)s"
#: contrib/comments/models.py:168 #: contrib/comments/models.py:168
#, fuzzy
msgid "person's name" msgid "person's name"
msgstr "nom" msgstr "nom"
#: contrib/comments/models.py:171 #: contrib/comments/models.py:171
#, fuzzy
msgid "ip address" msgid "ip address"
msgstr "adresse IP" msgstr "adresse IP"
@ -131,33 +124,28 @@ msgid "approved by staff"
msgstr "approuvé par l'équipe" msgstr "approuvé par l'équipe"
#: contrib/comments/models.py:176 #: contrib/comments/models.py:176
#, fuzzy
msgid "free comment" msgid "free comment"
msgstr "Commentaire libre" msgstr "commentaire libre"
#: contrib/comments/models.py:177 #: contrib/comments/models.py:177
#, fuzzy
msgid "free comments" msgid "free comments"
msgstr "Commentaires libres" msgstr "commentaires libres"
#: contrib/comments/models.py:233 #: contrib/comments/models.py:233
msgid "score" msgid "score"
msgstr "Évaluation" msgstr "evaluation"
#: contrib/comments/models.py:234 #: contrib/comments/models.py:234
#, fuzzy
msgid "score date" msgid "score date"
msgstr "Date d'évaluation" msgstr "date d'évaluation"
#: contrib/comments/models.py:237 #: contrib/comments/models.py:237
#, fuzzy
msgid "karma score" msgid "karma score"
msgstr "Point de Karma" msgstr "point de Karma"
#: contrib/comments/models.py:238 #: contrib/comments/models.py:238
#, fuzzy
msgid "karma scores" msgid "karma scores"
msgstr "Points de Karma" msgstr "points de Karma"
#: contrib/comments/models.py:242 #: contrib/comments/models.py:242
#, python-format #, python-format
@ -176,19 +164,16 @@ msgstr ""
"%(text)s" "%(text)s"
#: contrib/comments/models.py:265 #: contrib/comments/models.py:265
#, fuzzy
msgid "flag date" msgid "flag date"
msgstr "date d'indicateur" msgstr "date d'indicateur"
#: contrib/comments/models.py:268 #: contrib/comments/models.py:268
#, fuzzy
msgid "user flag" msgid "user flag"
msgstr "Indicateur utilisateur" msgstr "indicateur utilisateur"
#: contrib/comments/models.py:269 #: contrib/comments/models.py:269
#, fuzzy
msgid "user flags" msgid "user flags"
msgstr "Indicateurs utilisateur" msgstr "indicateurs utilisateur"
#: contrib/comments/models.py:273 #: contrib/comments/models.py:273
#, python-format #, python-format
@ -196,19 +181,16 @@ msgid "Flag by %r"
msgstr "Indicateur par %r" msgstr "Indicateur par %r"
#: contrib/comments/models.py:278 #: contrib/comments/models.py:278
#, fuzzy
msgid "deletion date" msgid "deletion date"
msgstr "date de suppression" msgstr "date de suppression"
#: contrib/comments/models.py:280 #: contrib/comments/models.py:280
#, fuzzy
msgid "moderator deletion" msgid "moderator deletion"
msgstr "Suppression de modérateur" msgstr "suppression de modérateur"
#: contrib/comments/models.py:281 #: contrib/comments/models.py:281
#, fuzzy
msgid "moderator deletions" msgid "moderator deletions"
msgstr "Suppressions de modérateur" msgstr "suppressions de modérateur"
#: contrib/comments/models.py:285 #: contrib/comments/models.py:285
#, python-format #, python-format
@ -220,7 +202,6 @@ msgid "Anonymous users cannot vote"
msgstr "Les utilisateurs anonymes ne peuvent pas voter" msgstr "Les utilisateurs anonymes ne peuvent pas voter"
#: contrib/comments/views/karma.py:23 #: contrib/comments/views/karma.py:23
#, fuzzy
msgid "Invalid comment ID" msgid "Invalid comment ID"
msgstr "ID de commentaire invalide" msgstr "ID de commentaire invalide"
@ -282,7 +263,7 @@ msgstr "Un ou plusieurs champs requis n'ont pas
#: contrib/comments/views/comments.py:286 #: contrib/comments/views/comments.py:286
msgid "Somebody tampered with the comment form (security violation)" msgid "Somebody tampered with the comment form (security violation)"
msgstr "" msgstr ""
"Quelqu'un a trifouillé le formulaire de commentaire (violation des règles de " "Quelqu'un a trafiqué le formulaire de commentaire (violation des règles de "
"sécurité)" "sécurité)"
#: contrib/comments/views/comments.py:207 #: contrib/comments/views/comments.py:207
@ -313,7 +294,6 @@ msgid "Password:"
msgstr "Mot de passe" msgstr "Mot de passe"
#: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:6
#, fuzzy
msgid "Forgotten your password?" msgid "Forgotten your password?"
msgstr "Mot de passe oublié?" msgstr "Mot de passe oublié?"
@ -346,33 +326,30 @@ msgstr "vote n
#: contrib/comments/templates/comments/form.html:12 #: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23 #: contrib/comments/templates/comments/form.html:23
msgid "Required" msgid "Required"
msgstr "" msgstr "Requis"
#: contrib/comments/templates/comments/form.html:12 #: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23 #: contrib/comments/templates/comments/form.html:23
msgid "Optional" msgid "Optional"
msgstr "" msgstr "Optionel"
#: contrib/comments/templates/comments/form.html:23 #: contrib/comments/templates/comments/form.html:23
msgid "Post a photo" msgid "Post a photo"
msgstr "" msgstr "Poster une photo"
#: contrib/comments/templates/comments/form.html:27 #: contrib/comments/templates/comments/form.html:27
#: contrib/comments/templates/comments/freeform.html:5 #: contrib/comments/templates/comments/freeform.html:5
#, fuzzy
msgid "Comment:" msgid "Comment:"
msgstr "Commentaire" msgstr "Commentaire :"
#: contrib/comments/templates/comments/form.html:32 #: contrib/comments/templates/comments/form.html:32
#: contrib/comments/templates/comments/freeform.html:9 #: contrib/comments/templates/comments/freeform.html:9
#, fuzzy
msgid "Preview comment" msgid "Preview comment"
msgstr "Prévisualisation du commentaire" msgstr "Prévisualisation du commentaire"
#: contrib/comments/templates/comments/freeform.html:4 #: contrib/comments/templates/comments/freeform.html:4
#, fuzzy
msgid "Your name:" msgid "Your name:"
msgstr "nom d'utilisateur" msgstr "Votre nom :"
#: contrib/admin/filterspecs.py:40 #: contrib/admin/filterspecs.py:40
#, python-format #, python-format
@ -393,7 +370,6 @@ msgid "Any date"
msgstr "Toutes les dates" msgstr "Toutes les dates"
#: contrib/admin/filterspecs.py:110 #: contrib/admin/filterspecs.py:110
#, fuzzy
msgid "Today" msgid "Today"
msgstr "Aujourd'hui" msgstr "Aujourd'hui"
@ -414,7 +390,6 @@ msgid "Yes"
msgstr "Oui" msgstr "Oui"
#: contrib/admin/filterspecs.py:143 #: contrib/admin/filterspecs.py:143
#, fuzzy
msgid "No" msgid "No"
msgstr "Non" msgstr "Non"
@ -496,7 +471,6 @@ msgstr ""
"Votre courriel n'est pas votre nom d'utilisateur. Essayez '%s' à la place." "Votre courriel n'est pas votre nom d'utilisateur. Essayez '%s' à la place."
#: contrib/admin/views/main.py:226 #: contrib/admin/views/main.py:226
#, fuzzy
msgid "Site administration" msgid "Site administration"
msgstr "Gestion du site" msgstr "Gestion du site"
@ -515,7 +489,7 @@ msgid "You may add another %s below."
msgstr "Vous pouvez ajouter un autre %s ci-dessous." msgstr "Vous pouvez ajouter un autre %s ci-dessous."
#: contrib/admin/views/main.py:290 #: contrib/admin/views/main.py:290
#, fuzzy, python-format #, python-format
msgid "Add %s" msgid "Add %s"
msgstr "Ajouter %s" msgstr "Ajouter %s"
@ -530,7 +504,7 @@ msgid "and"
msgstr "et" msgstr "et"
#: contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:338
#, fuzzy, python-format #, python-format
msgid "Changed %s." msgid "Changed %s."
msgstr "Modifié %s." msgstr "Modifié %s."
@ -557,7 +531,7 @@ msgstr ""
"de l'éditez ci-dessous." "de l'éditez ci-dessous."
#: contrib/admin/views/main.py:392 #: contrib/admin/views/main.py:392
#, fuzzy, python-format #, python-format
msgid "Change %s" msgid "Change %s"
msgstr "Changement %s" msgstr "Changement %s"
@ -581,7 +555,7 @@ msgid "Are you sure?"
msgstr "Êtes-vous sûr ?" msgstr "Êtes-vous sûr ?"
#: contrib/admin/views/main.py:533 #: contrib/admin/views/main.py:533
#, fuzzy, python-format #, python-format
msgid "Change history: %s" msgid "Change history: %s"
msgstr "Historique des changements : %s" msgstr "Historique des changements : %s"
@ -615,17 +589,14 @@ msgid "Comma-separated integers"
msgstr "Des entiers séparés par une virgule" msgstr "Des entiers séparés par une virgule"
#: contrib/admin/views/doc.py:281 #: contrib/admin/views/doc.py:281
#, fuzzy
msgid "Date (without time)" msgid "Date (without time)"
msgstr "Date (sans l'heure)" msgstr "Date (sans l'heure)"
#: contrib/admin/views/doc.py:282 #: contrib/admin/views/doc.py:282
#, fuzzy
msgid "Date (with time)" msgid "Date (with time)"
msgstr "Date (avec l'heure)" msgstr "Date (avec l'heure)"
#: contrib/admin/views/doc.py:283 #: contrib/admin/views/doc.py:283
#, fuzzy
msgid "E-mail address" msgid "E-mail address"
msgstr "Courriel :" msgstr "Courriel :"
@ -634,7 +605,6 @@ msgid "File path"
msgstr "Chemin vers le fichier" msgstr "Chemin vers le fichier"
#: contrib/admin/views/doc.py:285 #: contrib/admin/views/doc.py:285
#, fuzzy
msgid "Decimal number" msgid "Decimal number"
msgstr "Nombre décimal" msgstr "Nombre décimal"
@ -647,7 +617,6 @@ msgid "Relation to parent model"
msgstr "Relation au modèle parent" msgstr "Relation au modèle parent"
#: contrib/admin/views/doc.py:293 #: contrib/admin/views/doc.py:293
#, fuzzy
msgid "Phone number" msgid "Phone number"
msgstr "Numéro de téléphone" msgstr "Numéro de téléphone"
@ -755,9 +724,8 @@ msgid "Django administration"
msgstr "Administration de Django" msgstr "Administration de Django"
#: contrib/admin/templates/admin/500.html:4 #: contrib/admin/templates/admin/500.html:4
#, fuzzy
msgid "Server error" msgid "Server error"
msgstr "Erreur du serveur (500)" msgstr "Erreur du serveur"
#: contrib/admin/templates/admin/500.html:6 #: contrib/admin/templates/admin/500.html:6
msgid "Server error (500)" msgid "Server error (500)"
@ -788,7 +756,7 @@ msgstr "Nous sommes d
#: contrib/admin/templates/admin/index.html:17 #: contrib/admin/templates/admin/index.html:17
#, python-format #, python-format
msgid "Models available in the %(name)s application." msgid "Models available in the %(name)s application."
msgstr "" msgstr "Modèles disponibles dans l'application %(name)s."
#: contrib/admin/templates/admin/index.html:28 #: contrib/admin/templates/admin/index.html:28
#: contrib/admin/templates/admin/change_form.html:15 #: contrib/admin/templates/admin/change_form.html:15
@ -816,7 +784,7 @@ msgid "None available"
msgstr "Aucun(e) disponible" msgstr "Aucun(e) disponible"
#: contrib/admin/templates/admin/change_list.html:11 #: contrib/admin/templates/admin/change_list.html:11
#, fuzzy, python-format #, python-format
msgid "Add %(name)s" msgid "Add %(name)s"
msgstr "Ajouter %(name)s" msgstr "Ajouter %(name)s"
@ -834,7 +802,7 @@ msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: contrib/admin/templates/admin/delete_confirmation.html:14 #: contrib/admin/templates/admin/delete_confirmation.html:14
#, fuzzy, python-format #, python-format
msgid "" msgid ""
"Deleting the %(object_name)s '%(object)s' would result in deleting related " "Deleting the %(object_name)s '%(object)s' would result in deleting related "
"objects, but your account doesn't have permission to delete the following " "objects, but your account doesn't have permission to delete the following "
@ -897,7 +865,6 @@ msgid "Save and continue editing"
msgstr "Sauver et continuer les modifications" msgstr "Sauver et continuer les modifications"
#: contrib/admin/templates/admin/submit_line.html:7 #: contrib/admin/templates/admin/submit_line.html:7
#, fuzzy
msgid "Save" msgid "Save"
msgstr "Sauver" msgstr "Sauver"
@ -1051,9 +1018,8 @@ msgstr ""
"généré cette page." "généré cette page."
#: contrib/admin/templates/admin_doc/bookmarklets.html:22 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
#, fuzzy
msgid "Show object ID" msgid "Show object ID"
msgstr "Montrer l'ID de l'objet" msgstr "Afficher l'ID de l'objet"
#: contrib/admin/templates/admin_doc/bookmarklets.html:23 #: contrib/admin/templates/admin_doc/bookmarklets.html:23
msgid "" msgid ""
@ -1094,7 +1060,6 @@ msgid "Currently:"
msgstr "Actuellement :" msgstr "Actuellement :"
#: contrib/admin/templates/widget/file.html:3 #: contrib/admin/templates/widget/file.html:3
#, fuzzy
msgid "Change:" msgid "Change:"
msgstr "Modification :" msgstr "Modification :"
@ -1154,7 +1119,6 @@ msgid "template name"
msgstr "nom du template" msgstr "nom du template"
#: contrib/flatpages/models.py:13 #: contrib/flatpages/models.py:13
#, fuzzy
msgid "" msgid ""
"Example: 'flatpages/contact_page'. If this isn't provided, the system will " "Example: 'flatpages/contact_page'. If this isn't provided, the system will "
"use 'flatpages/default'." "use 'flatpages/default'."
@ -1189,24 +1153,20 @@ msgid "codename"
msgstr "nom de code" msgstr "nom de code"
#: contrib/auth/models.py:17 #: contrib/auth/models.py:17
#, fuzzy
msgid "permission" msgid "permission"
msgstr "Permission" msgstr "permission"
#: contrib/auth/models.py:18 contrib/auth/models.py:27 #: contrib/auth/models.py:18 contrib/auth/models.py:27
#, fuzzy
msgid "permissions" msgid "permissions"
msgstr "Permissions" msgstr "permissions"
#: contrib/auth/models.py:29 #: contrib/auth/models.py:29
#, fuzzy
msgid "group" msgid "group"
msgstr "Groupe" msgstr "groupe"
#: contrib/auth/models.py:30 contrib/auth/models.py:65 #: contrib/auth/models.py:30 contrib/auth/models.py:65
#, fuzzy
msgid "groups" msgid "groups"
msgstr "Groupes" msgstr "groupes"
#: contrib/auth/models.py:55 #: contrib/auth/models.py:55
msgid "username" msgid "username"
@ -1266,19 +1226,16 @@ msgstr ""
"appartient. " "appartient. "
#: contrib/auth/models.py:67 #: contrib/auth/models.py:67
#, fuzzy
msgid "user permissions" msgid "user permissions"
msgstr "Permissions" msgstr "permissions de l'utilisateur"
#: contrib/auth/models.py:70 #: contrib/auth/models.py:70
#, fuzzy
msgid "user" msgid "user"
msgstr "Utilisateur" msgstr "utilisateur"
#: contrib/auth/models.py:71 #: contrib/auth/models.py:71
#, fuzzy
msgid "users" msgid "users"
msgstr "Utilisateurs" msgstr "utilisateurs"
#: contrib/auth/models.py:76 #: contrib/auth/models.py:76
msgid "Personal info" msgid "Personal info"
@ -1297,9 +1254,8 @@ msgid "Groups"
msgstr "Groupes" msgstr "Groupes"
#: contrib/auth/models.py:219 #: contrib/auth/models.py:219
#, fuzzy
msgid "message" msgid "message"
msgstr "Message" msgstr "message"
#: contrib/auth/forms.py:30 #: contrib/auth/forms.py:30
msgid "" msgid ""
@ -1310,7 +1266,6 @@ msgstr ""
"nécessaire pour se connecter" "nécessaire pour se connecter"
#: contrib/contenttypes/models.py:25 #: contrib/contenttypes/models.py:25
#, fuzzy
msgid "python model class name" msgid "python model class name"
msgstr "nom du module python" msgstr "nom du module python"
@ -1447,54 +1402,52 @@ msgid "December"
msgstr "Décembre" msgstr "Décembre"
#: utils/dates.py:19 #: utils/dates.py:19
#, fuzzy
msgid "jan" msgid "jan"
msgstr "et" msgstr "jan"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "feb" msgid "feb"
msgstr "" msgstr "fév"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "mar" msgid "mar"
msgstr "" msgstr "mar"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "apr" msgid "apr"
msgstr "" msgstr "avr"
#: utils/dates.py:19 #: utils/dates.py:19
#, fuzzy
msgid "may" msgid "may"
msgstr "journée" msgstr "mai"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "jun" msgid "jun"
msgstr "" msgstr "jui"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "jul" msgid "jul"
msgstr "" msgstr "jul"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "aug" msgid "aug"
msgstr "" msgstr "aout"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "sep" msgid "sep"
msgstr "" msgstr "sep"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "oct" msgid "oct"
msgstr "" msgstr "oct"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "nov" msgid "nov"
msgstr "" msgstr "nov"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "dec" msgid "dec"
msgstr "" msgstr "déc"
#: utils/dates.py:27 #: utils/dates.py:27
msgid "Jan." msgid "Jan."
@ -1544,7 +1497,6 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: utils/timesince.py:15 #: utils/timesince.py:15
#, fuzzy
msgid "day" msgid "day"
msgid_plural "days" msgid_plural "days"
msgstr[0] "journée" msgstr[0] "journée"
@ -1557,7 +1509,6 @@ msgstr[0] "heure"
msgstr[1] "heures" msgstr[1] "heures"
#: utils/timesince.py:17 #: utils/timesince.py:17
#, fuzzy
msgid "minute" msgid "minute"
msgid_plural "minutes" msgid_plural "minutes"
msgstr[0] "minute" msgstr[0] "minute"
@ -1576,7 +1527,6 @@ msgid "Welsh"
msgstr "Gallois" msgstr "Gallois"
#: conf/global_settings.py:40 #: conf/global_settings.py:40
#, fuzzy
msgid "Danish" msgid "Danish"
msgstr "Dannois" msgstr "Dannois"
@ -1617,13 +1567,12 @@ msgid "Icelandic"
msgstr "Islandais" msgstr "Islandais"
#: conf/global_settings.py:50 #: conf/global_settings.py:50
#, fuzzy
msgid "Italian" msgid "Italian"
msgstr "Italien" msgstr "Italien"
#: conf/global_settings.py:51 #: conf/global_settings.py:51
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr "Japonais"
#: conf/global_settings.py:52 #: conf/global_settings.py:52
msgid "Dutch" msgid "Dutch"
@ -1655,7 +1604,6 @@ msgid "Slovenian"
msgstr "Slovaque" msgstr "Slovaque"
#: conf/global_settings.py:59 #: conf/global_settings.py:59
#, fuzzy
msgid "Serbian" msgid "Serbian"
msgstr "Serbe" msgstr "Serbe"
@ -1664,9 +1612,8 @@ msgid "Swedish"
msgstr "Suédois" msgstr "Suédois"
#: conf/global_settings.py:61 #: conf/global_settings.py:61
#, fuzzy
msgid "Ukrainian" msgid "Ukrainian"
msgstr "Brésilien" msgstr "Ukrainien"
#: conf/global_settings.py:62 #: conf/global_settings.py:62
msgid "Simplified Chinese" msgid "Simplified Chinese"
@ -1683,7 +1630,6 @@ msgstr ""
"('_')." "('_')."
#: core/validators.py:64 #: core/validators.py:64
#, fuzzy
msgid "" msgid ""
"This value must contain only letters, numbers, underscores, dashes or " "This value must contain only letters, numbers, underscores, dashes or "
"slashes." "slashes."
@ -1968,42 +1914,35 @@ msgstr "%(optname)s avec le champs %(fieldname)s existe d
#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
#: forms/__init__.py:346 #: forms/__init__.py:346
#, fuzzy
msgid "This field is required." msgid "This field is required."
msgstr "Ce champ est obligatoire." msgstr "Ce champ est obligatoire."
#: db/models/fields/__init__.py:337 #: db/models/fields/__init__.py:337
#, fuzzy
msgid "This value must be an integer." msgid "This value must be an integer."
msgstr "Cette valeur doit être une puissance de %s." msgstr "Cette valeur doit être un entier."
#: db/models/fields/__init__.py:369 #: db/models/fields/__init__.py:369
#, fuzzy
msgid "This value must be either True or False." msgid "This value must be either True or False."
msgstr "Cette valeur doit être une puissance de %s." msgstr "Cette valeur doit être soit Vraie soit Fausse."
#: db/models/fields/__init__.py:385 #: db/models/fields/__init__.py:385
#, fuzzy
msgid "This field cannot be null." msgid "This field cannot be null."
msgstr "Ce champ est invalide." msgstr "Ce champ ne peut pas être vide."
#: db/models/fields/__init__.py:562 #: db/models/fields/__init__.py:562
#, fuzzy
msgid "Enter a valid filename." msgid "Enter a valid filename."
msgstr "Entrez un nom de fichier valide." msgstr "Entrez un nom de fichier valide."
#: db/models/fields/related.py:43 #: db/models/fields/related.py:43
#, fuzzy, python-format #, python-format
msgid "Please enter a valid %s." msgid "Please enter a valid %s."
msgstr "Entrez une adresse IP valide." msgstr "Entrez un %s valide."
#: db/models/fields/related.py:579 #: db/models/fields/related.py:579
#, fuzzy
msgid "Separate multiple IDs with commas." msgid "Separate multiple IDs with commas."
msgstr "Séparez les ID par des virgules." msgstr "Séparez les ID par des virgules."
#: db/models/fields/related.py:581 #: db/models/fields/related.py:581
#, fuzzy
msgid "" msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr "" msgstr ""
@ -2029,7 +1968,7 @@ msgstr[1] "Assurez-vous que votre texte fais moins de %s caract
#: forms/__init__.py:385 #: forms/__init__.py:385
#, fuzzy #, fuzzy
msgid "Line breaks are not allowed here." msgid "Line breaks are not allowed here."
msgstr "Les lettres minuscules ne sont pas autorisées ici." msgstr "Les retours à la ligne ne sont pas autorisés ici."
#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 #: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
#, python-format #, python-format
@ -2041,17 +1980,14 @@ msgid "The submitted file is empty."
msgstr "Le fichier soumis est vide." msgstr "Le fichier soumis est vide."
#: forms/__init__.py:699 #: forms/__init__.py:699
#, fuzzy
msgid "Enter a whole number between -32,768 and 32,767." msgid "Enter a whole number between -32,768 and 32,767."
msgstr "Entrez un nombre entier entre -32 768 et 32 767." msgstr "Entrez un nombre entier entre -32 768 et 32 767."
#: forms/__init__.py:708 #: forms/__init__.py:708
#, fuzzy
msgid "Enter a positive number." msgid "Enter a positive number."
msgstr "Entrez un nombre entier positif." msgstr "Entrez un nombre entier positif."
#: forms/__init__.py:717 #: forms/__init__.py:717
#, fuzzy
msgid "Enter a whole number between 0 and 32,767." msgid "Enter a whole number between 0 and 32,767."
msgstr "Entrez un nombre entier entre 0 et 32 767." msgstr "Entrez un nombre entier entre 0 et 32 767."
@ -2062,7 +1998,6 @@ msgstr "oui,non,peut-
#~ msgid "Comment" #~ msgid "Comment"
#~ msgstr "Commentaire" #~ msgstr "Commentaire"
#, fuzzy
#~ msgid "Comments" #~ msgid "Comments"
#~ msgstr "Commentaires" #~ msgstr "Commentaires"

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
# Italian translation for the django-admin JS files # Italian translation for the django-admin JS files
# Copyright (C) 2005 # Copyright (C) 2006 the Lawrence Journal-World
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the Django package.
# Antonio Cavedoni <antonio@cavedoni.org>, 2005. # Carlo C8E Miron <carlo.miron AT gmail.com>, 2006.
# #
msgid "" msgid ""
msgstr "" msgstr ""
@ -9,41 +9,42 @@ msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-09 11:51+0100\n" "POT-Creation-Date: 2005-12-09 11:51+0100\n"
"PO-Revision-Date: 2005-12-04 21:47+0100\n" "PO-Revision-Date: 2005-12-04 21:47+0100\n"
"Last-Translator: Antonio Cavedoni <antonio@cavedoni.org>\n" "Last-Translator: Carlo C8E Miron <carlo.miron AT gmail.com>\n"
"Language-Team: Italian <Django-I18N@googlegroups.com>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: contrib/admin/media/js/SelectFilter2.js:33 #: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format #, perl-format
msgid "Available %s" msgid "Available %s"
msgstr "" msgstr "Disponibile %s"
#: contrib/admin/media/js/SelectFilter2.js:41 #: contrib/admin/media/js/SelectFilter2.js:41
#, fuzzy
msgid "Choose all" msgid "Choose all"
msgstr "Seleziona un orario" msgstr "Seleziona tutto"
#: contrib/admin/media/js/SelectFilter2.js:46 #: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add" msgid "Add"
msgstr "" msgstr "Aggiungi"
#: contrib/admin/media/js/SelectFilter2.js:48 #: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove" msgid "Remove"
msgstr "" msgstr "Rimuovi"
#: contrib/admin/media/js/SelectFilter2.js:53 #: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format #, perl-format
msgid "Chosen %s" msgid "Chosen %s"
msgstr "" msgstr "Selezionato %s"
#: contrib/admin/media/js/SelectFilter2.js:54 #: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click " msgid "Select your choice(s) and click "
msgstr "" msgstr "Seleziona le tue scelte e clicca "
#: contrib/admin/media/js/SelectFilter2.js:59 #: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all" msgid "Clear all"
msgstr "" msgstr "Cancella tutto"
#: contrib/admin/media/js/dateparse.js:26 #: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/calendar.js:24 #: contrib/admin/media/js/calendar.js:24
@ -56,7 +57,7 @@ msgstr ""
#: contrib/admin/media/js/dateparse.js:27 #: contrib/admin/media/js/dateparse.js:27
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "" msgstr "Domenica Lunedì Martedì Mercoledì Giovedì Venerdì Sabato"
#: contrib/admin/media/js/calendar.js:25 #: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S" msgid "S M T W T F S"

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
# SOME DESCRIPTIVE TITLE. # Dutch Javascript translations.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # Copyright (C) 2006
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the Django package.
# Rudolph Froger <rfroger@estrate.nl>, 2006. # Rudolph Froger <rfroger@estrate.nl>, 2006.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-02 16:52+0200\n" "POT-Creation-Date: 2006-05-16 17:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: Rudolph Froger <rfroger@estrate.nl>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: nl <LL@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@ -30,12 +30,12 @@ msgstr "Z M D W D V Z"
#: contrib/admin/media/js/dateparse.js:33 #: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "Zondag Maandag Dinsdag Woensdag Donderdag Vrijdag Zaterdag" msgstr "zondag maandag dinsdag woensdag donderdag vrijdag zaterdag"
#: contrib/admin/media/js/SelectFilter2.js:33 #: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format #, perl-format
msgid "Available %s" msgid "Available %s"
msgstr "Beschikbaar" msgstr "Beschikbare %s"
#: contrib/admin/media/js/SelectFilter2.js:41 #: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all" msgid "Choose all"

View File

@ -822,7 +822,7 @@ msgid ""
"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
"the following related items will be deleted:" "the following related items will be deleted:"
msgstr "" msgstr ""
"Er du sikker på at du vill slette %(object_name) \"%(object)s\"? Alle de " "Er du sikker på at du vill slette %(object_name)s \"%(object)s\"? Alle de "
"følgende relaterte objektene vill bli slettet:" "følgende relaterte objektene vill bli slettet:"
#: contrib/admin/templates/admin/delete_confirmation.html:26 #: contrib/admin/templates/admin/delete_confirmation.html:26

View File

@ -90,9 +90,8 @@ msgstr ""
"\" táto správa sa objaví namiesto neho." "\" táto správa sa objaví namiesto neho."
#: contrib/comments/models.py:91 #: contrib/comments/models.py:91
#, fuzzy
msgid "comments" msgid "comments"
msgstr "komentár" msgstr "komentáre"
#: contrib/comments/models.py:131 contrib/comments/models.py:207 #: contrib/comments/models.py:131 contrib/comments/models.py:207
msgid "Content object" msgid "Content object"
@ -126,14 +125,12 @@ msgid "approved by staff"
msgstr "je zamestnancom" msgstr "je zamestnancom"
#: contrib/comments/models.py:176 #: contrib/comments/models.py:176
#, fuzzy
msgid "free comment" msgid "free comment"
msgstr "Voľný komentár" msgstr "voľný komentár"
#: contrib/comments/models.py:177 #: contrib/comments/models.py:177
#, fuzzy
msgid "free comments" msgid "free comments"
msgstr "Voľné komentáre" msgstr "voľné komentáre"
#: contrib/comments/models.py:233 #: contrib/comments/models.py:233
msgid "score" msgid "score"
@ -144,14 +141,12 @@ msgid "score date"
msgstr "údaje stavu" msgstr "údaje stavu"
#: contrib/comments/models.py:237 #: contrib/comments/models.py:237
#, fuzzy
msgid "karma score" msgid "karma score"
msgstr "Karma údaj" msgstr "karma údaj"
#: contrib/comments/models.py:238 #: contrib/comments/models.py:238
#, fuzzy
msgid "karma scores" msgid "karma scores"
msgstr "Karma údaje" msgstr "karma údaje"
#: contrib/comments/models.py:242 #: contrib/comments/models.py:242
#, python-format #, python-format
@ -174,14 +169,12 @@ msgid "flag date"
msgstr "dátumové návestie" msgstr "dátumové návestie"
#: contrib/comments/models.py:268 #: contrib/comments/models.py:268
#, fuzzy
msgid "user flag" msgid "user flag"
msgstr "Návestie uživateľa" msgstr "návestie uživateľa"
#: contrib/comments/models.py:269 #: contrib/comments/models.py:269
#, fuzzy
msgid "user flags" msgid "user flags"
msgstr "Návestia užívateľa" msgstr "návestia užívateľa"
#: contrib/comments/models.py:273 #: contrib/comments/models.py:273
#, python-format #, python-format
@ -193,14 +186,12 @@ msgid "deletion date"
msgstr "odstránené dátumy" msgstr "odstránené dátumy"
#: contrib/comments/models.py:280 #: contrib/comments/models.py:280
#, fuzzy
msgid "moderator deletion" msgid "moderator deletion"
msgstr "Moderátor odstránenia" msgstr "moderátor odstránenia"
#: contrib/comments/models.py:281 #: contrib/comments/models.py:281
#, fuzzy
msgid "moderator deletions" msgid "moderator deletions"
msgstr "Moderátor odstránení" msgstr "moderátor odstránení"
#: contrib/comments/models.py:285 #: contrib/comments/models.py:285
#, python-format #, python-format
@ -1157,24 +1148,20 @@ msgid "codename"
msgstr "codename" msgstr "codename"
#: contrib/auth/models.py:17 #: contrib/auth/models.py:17
#, fuzzy
msgid "permission" msgid "permission"
msgstr "Povolenie" msgstr "povolenie"
#: contrib/auth/models.py:18 contrib/auth/models.py:27 #: contrib/auth/models.py:18 contrib/auth/models.py:27
#, fuzzy
msgid "permissions" msgid "permissions"
msgstr "Povolenia" msgstr "povolenia"
#: contrib/auth/models.py:29 #: contrib/auth/models.py:29
#, fuzzy
msgid "group" msgid "group"
msgstr "Skupina" msgstr "skupina"
#: contrib/auth/models.py:30 contrib/auth/models.py:65 #: contrib/auth/models.py:30 contrib/auth/models.py:65
#, fuzzy
msgid "groups" msgid "groups"
msgstr "Skupiny" msgstr "skupiny"
#: contrib/auth/models.py:55 #: contrib/auth/models.py:55
msgid "username" msgid "username"
@ -1233,17 +1220,14 @@ msgstr ""
"skupin, v ktorých sa nachádza." "skupin, v ktorých sa nachádza."
#: contrib/auth/models.py:67 #: contrib/auth/models.py:67
#, fuzzy
msgid "user permissions" msgid "user permissions"
msgstr "Povolenia" msgstr "pridelené povolenia"
#: contrib/auth/models.py:70 #: contrib/auth/models.py:70
#, fuzzy
msgid "user" msgid "user"
msgstr "Uživateľ" msgstr "Uživateľ"
#: contrib/auth/models.py:71 #: contrib/auth/models.py:71
#, fuzzy
msgid "users" msgid "users"
msgstr "Užívatelia" msgstr "Užívatelia"
@ -1264,9 +1248,8 @@ msgid "Groups"
msgstr "Skupiny" msgstr "Skupiny"
#: contrib/auth/models.py:219 #: contrib/auth/models.py:219
#, fuzzy
msgid "message" msgid "message"
msgstr "Zpráva" msgstr "zpráva"
#: contrib/auth/forms.py:30 #: contrib/auth/forms.py:30
msgid "" msgid ""
@ -1277,9 +1260,8 @@ msgstr ""
"nevýhnutné aby ste sa mohli prilásiť." "nevýhnutné aby ste sa mohli prilásiť."
#: contrib/contenttypes/models.py:25 #: contrib/contenttypes/models.py:25
#, fuzzy
msgid "python model class name" msgid "python model class name"
msgstr "meno python modulu" msgstr "pythonové meno triedy modelu"
#: contrib/contenttypes/models.py:28 #: contrib/contenttypes/models.py:28
msgid "content type" msgid "content type"
@ -1414,7 +1396,6 @@ msgid "December"
msgstr "December" msgstr "December"
#: utils/dates.py:19 #: utils/dates.py:19
#, fuzzy
msgid "jan" msgid "jan"
msgstr "a" msgstr "a"
@ -1431,17 +1412,16 @@ msgid "apr"
msgstr "" msgstr ""
#: utils/dates.py:19 #: utils/dates.py:19
#, fuzzy
msgid "may" msgid "may"
msgstr "ďeň" msgstr "máj"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "jun" msgid "jun"
msgstr "" msgstr "jún"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "jul" msgid "jul"
msgstr "" msgstr "júl"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "aug" msgid "aug"
@ -1453,7 +1433,7 @@ msgstr ""
#: utils/dates.py:20 #: utils/dates.py:20
msgid "oct" msgid "oct"
msgstr "" msgstr "okt"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "nov" msgid "nov"
@ -1624,9 +1604,8 @@ msgid "Swedish"
msgstr "Švédsky" msgstr "Švédsky"
#: conf/global_settings.py:61 #: conf/global_settings.py:61
#, fuzzy
msgid "Ukrainian" msgid "Ukrainian"
msgstr "Brazílsky" msgstr "Ukrajínsky"
#: conf/global_settings.py:62 #: conf/global_settings.py:62
msgid "Simplified Chinese" msgid "Simplified Chinese"
@ -1922,19 +1901,16 @@ msgid "This field is required."
msgstr "Toto pole je nevyhnutné." msgstr "Toto pole je nevyhnutné."
#: db/models/fields/__init__.py:337 #: db/models/fields/__init__.py:337
#, fuzzy
msgid "This value must be an integer." msgid "This value must be an integer."
msgstr "Táto hodnota musí byť mocninou %s." msgstr "Táto hodnota musí byť integer."
#: db/models/fields/__init__.py:369 #: db/models/fields/__init__.py:369
#, fuzzy
msgid "This value must be either True or False." msgid "This value must be either True or False."
msgstr "Táto hodnota musí byť mocninou %s." msgstr "Táto hodnota musí byť buď True alebo False."
#: db/models/fields/__init__.py:385 #: db/models/fields/__init__.py:385
#, fuzzy
msgid "This field cannot be null." msgid "This field cannot be null."
msgstr "Toto pole nie je platné." msgstr "Toto pole nemôže obsahovať null."
#: db/models/fields/__init__.py:562 #: db/models/fields/__init__.py:562
msgid "Enter a valid filename." msgid "Enter a valid filename."
@ -1946,12 +1922,10 @@ msgid "Please enter a valid %s."
msgstr "Prosím vložte platné %s." msgstr "Prosím vložte platné %s."
#: db/models/fields/related.py:579 #: db/models/fields/related.py:579
#, fuzzy
msgid "Separate multiple IDs with commas." msgid "Separate multiple IDs with commas."
msgstr "Identifikátory oddeľte čiarkami." msgstr "Oddeľte viacnásobné ID čiarkami."
#: db/models/fields/related.py:581 #: db/models/fields/related.py:581
#, fuzzy
msgid "" msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr "" msgstr ""

View File

@ -51,10 +51,10 @@ TEMPLATE_LOADERS = (
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
"django.middleware.common.CommonMiddleware", 'django.middleware.common.CommonMiddleware',
"django.contrib.sessions.middleware.SessionMiddleware", 'django.contrib.sessions.middleware.SessionMiddleware',
"django.contrib.auth.middleware.AuthenticationMiddleware", 'django.contrib.auth.middleware.AuthenticationMiddleware',
"django.middleware.doc.XViewMiddleware", 'django.middleware.doc.XViewMiddleware',
) )
ROOT_URLCONF = '{{ project_name }}.urls' ROOT_URLCONF = '{{ project_name }}.urls'

View File

@ -118,7 +118,7 @@ class AdminBoundField(object):
self.raw_id_admin = use_raw_id_admin(field) self.raw_id_admin = use_raw_id_admin(field)
self.is_date_time = isinstance(field, models.DateTimeField) self.is_date_time = isinstance(field, models.DateTimeField)
self.is_file_field = isinstance(field, models.FileField) self.is_file_field = isinstance(field, models.FileField)
self.needs_add_label = field.rel and isinstance(field.rel, models.ManyToOneRel) or isinstance(field.rel, models.ManyToManyRel) and field.rel.to._meta.admin self.needs_add_label = field.rel and (isinstance(field.rel, models.ManyToOneRel) or isinstance(field.rel, models.ManyToManyRel)) and field.rel.to._meta.admin
self.hidden = isinstance(self.field, models.AutoField) self.hidden = isinstance(self.field, models.AutoField)
self.first = False self.first = False

View File

@ -5,7 +5,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
class LatestFreeCommentsFeed(Feed): class LatestFreeCommentsFeed(Feed):
"""Feed of latest comments on the current site""" "Feed of latest comments on the current site."
comments_class = FreeComment comments_class = FreeComment
@ -25,24 +25,18 @@ class LatestFreeCommentsFeed(Feed):
return "Latest comments on %s" % self._site.name return "Latest comments on %s" % self._site.name
def items(self): def items(self):
return self.comments_class.objects.filter(**self._get_lookup_kwargs()) return self.comments_class.objects.filter(site__pk=settings.SITE_ID, is_public=True)[:40]
def _get_lookup_kwargs(self):
return {
'site__pk': settings.SITE_ID,
'is_public__exact': True,
'limit': 40,
}
class LatestCommentsFeed(LatestFreeCommentsFeed): class LatestCommentsFeed(LatestFreeCommentsFeed):
"""Feed of latest free comments on the current site""" """Feed of latest free comments on the current site"""
comments_class = Comment comments_class = Comment
def _get_lookup_kwargs(self): def items(self):
kwargs = LatestFreeCommentsFeed._get_lookup_kwargs(self) qs = LatestFreeCommentsFeed.items(self)
kwargs['is_removed__exact'] = False qs = qs.filter(is_removed=False)
if settings.COMMENTS_BANNED_USERS_GROUP: if settings.COMMENTS_BANNED_USERS_GROUP:
kwargs['where'] = ['user_id NOT IN (SELECT user_id FROM auth_users_group WHERE group_id = %s)'] where = ['user_id NOT IN (SELECT user_id FROM auth_users_group WHERE group_id = %s)']
kwargs['params'] = [COMMENTS_BANNED_USERS_GROUP] params = [COMMENTS_BANNED_USERS_GROUP]
return kwargs qs = qs.extra(where=where, params=params)
return qs

View File

@ -252,7 +252,7 @@ def post_comment(request):
else: else:
manipulator.do_html2python(new_data) manipulator.do_html2python(new_data)
comment = manipulator.save(new_data) comment = manipulator.save(new_data)
return HttpResponseRedirect("/comments/posted/?c=%s:%s" % (content_type_id, object_id)) return HttpResponseRedirect("../posted/?c=%s:%s" % (content_type_id, object_id))
else: else:
raise Http404, _("The comment form didn't provide either 'preview' or 'post'") raise Http404, _("The comment form didn't provide either 'preview' or 'post'")
@ -316,7 +316,7 @@ def post_free_comment(request):
else: else:
manipulator.do_html2python(new_data) manipulator.do_html2python(new_data)
comment = manipulator.save(new_data) comment = manipulator.save(new_data)
return HttpResponseRedirect("/comments/posted/?c=%s:%s" % (content_type_id, object_id)) return HttpResponseRedirect("../posted/?c=%s:%s" % (content_type_id, object_id))
else: else:
raise Http404, _("The comment form didn't provide either 'preview' or 'post'") raise Http404, _("The comment form didn't provide either 'preview' or 'post'")

View File

@ -7,20 +7,14 @@ class CurrentSiteManager(models.Manager):
def __init__(self, field_name='site'): def __init__(self, field_name='site'):
super(CurrentSiteManager, self).__init__() super(CurrentSiteManager, self).__init__()
self.__field_name = field_name self.__field_name = field_name
self.__is_validated = False
def contribute_to_class(self, *args, **kwargs):
# This method is overridden purely to check for errors in
# self.field_name. We can't do this in __init__() because of
# how Managers are implemented -- self.model isn't available
# until after contribute_to_class() is called.
super(CurrentSiteManager, self).contribute_to_class(*args, **kwargs)
try:
self.model._meta.get_field(self.__field_name)
except FieldDoesNotExist:
raise ValueError, "%s couldn't find a field named %s in %s." % \
(self.__class__.__name__, self.__field_name, self.model._meta.object_name)
self.__lookup = self.__field_name + '__id__exact'
del self.__field_name
def get_query_set(self): def get_query_set(self):
return super(SiteLimitManager, self).get_query_set().filter(**{self.__lookup: settings.SITE_ID}) if not self.__is_validated:
try:
self.model._meta.get_field(self.__field_name)
except FieldDoesNotExist:
raise ValueError, "%s couldn't find a field named %s in %s." % \
(self.__class__.__name__, self.__field_name, self.model._meta.object_name)
self.__is_validated = True
return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})

View File

@ -95,6 +95,8 @@ class BaseHandler:
return callback(request, **param_dict) return callback(request, **param_dict)
except exceptions.PermissionDenied: except exceptions.PermissionDenied:
return http.HttpResponseForbidden('<h1>Permission denied</h1>') return http.HttpResponseForbidden('<h1>Permission denied</h1>')
except SystemExit:
pass # See http://code.djangoproject.com/ticket/1023
except: # Handle everything else, including SuspiciousOperation, etc. except: # Handle everything else, including SuspiciousOperation, etc.
if settings.DEBUG: if settings.DEBUG:
return self.get_technical_error_response(request) return self.get_technical_error_response(request)

View File

@ -3,7 +3,7 @@
from django.conf import settings from django.conf import settings
from email.MIMEText import MIMEText from email.MIMEText import MIMEText
from email.Header import Header from email.Header import Header
import smtplib import smtplib, rfc822
class BadHeaderError(ValueError): class BadHeaderError(ValueError):
pass pass
@ -49,6 +49,7 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=settings.EMAIL_HOST
msg['Subject'] = subject msg['Subject'] = subject
msg['From'] = from_email msg['From'] = from_email
msg['To'] = ', '.join(recipient_list) msg['To'] = ', '.join(recipient_list)
msg['Date'] = rfc822.formatdate()
try: try:
server.sendmail(from_email, recipient_list, msg.as_string()) server.sendmail(from_email, recipient_list, msg.as_string())
num_sent += 1 num_sent += 1

View File

@ -328,13 +328,23 @@ def get_sql_initial_data_for_model(model):
app_dir = os.path.normpath(os.path.join(os.path.dirname(models.get_app(model._meta.app_label).__file__), 'sql')) app_dir = os.path.normpath(os.path.join(os.path.dirname(models.get_app(model._meta.app_label).__file__), 'sql'))
output = [] output = []
# Some backends can't execute more than one SQL statement at a time,
# so split into separate statements.
sql_expr = re.compile(
r"""( # each statement is...
(?: # one or more chunks of ...
(?:[^;'"]+) # not the end of a statement or start of a quote
| (?:'[^']+') # something in single quotes
| (?:"[^"]+") # something in double quotes
)+)""", re.VERBOSE)
# Find custom SQL, if it's available. # Find custom SQL, if it's available.
sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), settings.DATABASE_ENGINE)), sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), settings.DATABASE_ENGINE)),
os.path.join(app_dir, "%s.sql" % opts.object_name.lower())] os.path.join(app_dir, "%s.sql" % opts.object_name.lower())]
for sql_file in sql_files: for sql_file in sql_files:
if os.path.exists(sql_file): if os.path.exists(sql_file):
fp = open(sql_file) fp = open(sql_file)
output.append(fp.read()) output.extend(sql_expr.findall(fp.read()))
fp.close() fp.close()
return output return output

View File

@ -17,8 +17,11 @@ except ImportError, e:
backend_dir = os.path.join(__path__[0], 'backends') backend_dir = os.path.join(__path__[0], 'backends')
available_backends = [f for f in os.listdir(backend_dir) if not f.startswith('_') and not f.startswith('.') and not f.endswith('.py') and not f.endswith('.pyc')] available_backends = [f for f in os.listdir(backend_dir) if not f.startswith('_') and not f.startswith('.') and not f.endswith('.py') and not f.endswith('.pyc')]
available_backends.sort() available_backends.sort()
raise ImproperlyConfigured, "Could not load database backend: %s. Is your DATABASE_ENGINE setting (currently, %r) spelled correctly? Available options are: %s" % \ if settings.DATABASE_ENGINE not in available_backends:
(e, settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends))) raise ImproperlyConfigured, "%r isn't an available database backend. vailable options are: %s" % \
(settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends)))
else:
raise # If there's some other error, this must be an error in Django itself.
get_introspection_module = lambda: __import__('django.db.backends.%s.introspection' % settings.DATABASE_ENGINE, '', '', ['']) get_introspection_module = lambda: __import__('django.db.backends.%s.introspection' % settings.DATABASE_ENGINE, '', '', [''])
get_creation_module = lambda: __import__('django.db.backends.%s.creation' % settings.DATABASE_ENGINE, '', '', ['']) get_creation_module = lambda: __import__('django.db.backends.%s.creation' % settings.DATABASE_ENGINE, '', '', [''])

View File

@ -5,7 +5,11 @@ Requires adodbapi 2.0.1: http://adodbapi.sourceforge.net/
""" """
from django.db.backends import util from django.db.backends import util
import adodbapi as Database try:
import adodbapi as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading adodbapi module: %s" % e
import datetime import datetime
try: try:
import mx import mx

View File

@ -5,7 +5,11 @@ Requires MySQLdb: http://sourceforge.net/projects/mysql-python
""" """
from django.db.backends import util from django.db.backends import util
import MySQLdb as Database try:
import MySQLdb as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading MySQLdb module: %s" % e
from MySQLdb.converters import conversions from MySQLdb.converters import conversions
from MySQLdb.constants import FIELD_TYPE from MySQLdb.constants import FIELD_TYPE
import types import types

View File

View File

@ -0,0 +1,126 @@
"""
Oracle database backend for Django.
Requires cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/
"""
from django.db.backends import util
try:
import cx_Oracle as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading cx_Oracle module: %s" % e
import types
DatabaseError = Database.Error
try:
# Only exists in Python 2.4+
from threading import local
except ImportError:
# Import copy of _thread_local.py from Python 2.4
from django.utils._threading_local import local
class DatabaseWrapper(local):
def __init__(self):
self.connection = None
self.queries = []
def _valid_connection(self):
return self.connection is not None
def cursor(self):
from django.conf import settings
if not self._valid_connection():
if len(settings.DATABASE_HOST.strip()) == 0:
settings.DATABASE_HOST = 'localhost'
if len(settings.DATABASE_PORT.strip()) != 0:
dsn = Database.makedsn(settings.DATABASE_HOST, int(settings.DATABASE_PORT), settings.DATABASE_NAME)
self.connection = Database.connect(settings.DATABASE_USER, settings.DATABASE_PASSWORD, dsn)
else:
conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
self.connection = Database.connect(conn_string)
return FormatStylePlaceholderCursor(self.connection)
def _commit(self):
self.connection.commit()
def _rollback(self):
if self.connection:
try:
self.connection.rollback()
except Database.NotSupportedError:
pass
def close(self):
if self.connection is not None:
self.connection.close()
self.connection = None
supports_constraints = True
class FormatStylePlaceholderCursor(Database.Cursor):
"""
Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var" style.
This fixes it -- but note that if you want to use a literal "%s" in a query,
you'll need to use "%%s".
"""
def execute(self, query, params=[]):
query = self.convert_arguments(query, len(params))
return Database.Cursor.execute(self, query, params)
def executemany(self, query, params=[]):
query = self.convert_arguments(query, len(params[0]))
return Database.Cursor.executemany(self, query, params)
def convert_arguments(self, query, num_params):
# replace occurances of "%s" with ":arg" - Oracle requires colons for parameter placeholders.
args = [':arg' for i in range(num_params)]
return query % tuple(args)
def quote_name(name):
return name
dictfetchone = util.dictfetchone
dictfetchmany = util.dictfetchmany
dictfetchall = util.dictfetchall
def get_last_insert_id(cursor, table_name, pk_name):
query = "SELECT %s_sq.currval from dual" % table_name
cursor.execute(query)
return cursor.fetchone()[0]
def get_date_extract_sql(lookup_type, table_name):
# lookup_type is 'year', 'month', 'day'
# http://www.psoug.org/reference/date_func.html
return "EXTRACT(%s FROM %s)" % (lookup_type, table_name)
def get_date_trunc_sql(lookup_type, field_name):
return "EXTRACT(%s FROM TRUNC(%s))" % (lookup_type, field_name)
def get_limit_offset_sql(limit, offset=None):
# Limits and offset are too complicated to be handled here.
# Instead, they are handled in django/db/query.py.
pass
def get_random_function_sql():
return "DBMS_RANDOM.RANDOM"
def get_drop_foreignkey_sql():
return "DROP FOREIGN KEY"
OPERATOR_MAPPING = {
'exact': '= %s',
'iexact': 'LIKE %s',
'contains': 'LIKE %s',
'icontains': 'LIKE %s',
'ne': '!= %s',
'gt': '> %s',
'gte': '>= %s',
'lt': '< %s',
'lte': '<= %s',
'startswith': 'LIKE %s',
'endswith': 'LIKE %s',
'istartswith': 'LIKE %s',
'iendswith': 'LIKE %s',
}

View File

@ -0,0 +1,10 @@
from django.conf import settings
import os
def runshell():
args = ''
args += settings.DATABASE_USER
if settings.DATABASE_PASSWORD:
args += "/%s" % settings.DATABASE_PASSWORD
args += "@%s" % settings.DATABASE_NAME
os.execvp('sqlplus', args)

View File

@ -0,0 +1,26 @@
DATA_TYPES = {
'AutoField': 'number(38)',
'BooleanField': 'number(1)',
'CharField': 'varchar2(%(maxlength)s)',
'CommaSeparatedIntegerField': 'varchar2(%(maxlength)s)',
'DateField': 'date',
'DateTimeField': 'date',
'FileField': 'varchar2(100)',
'FilePathField': 'varchar2(100)',
'FloatField': 'number(%(max_digits)s, %(decimal_places)s)',
'ImageField': 'varchar2(100)',
'IntegerField': 'integer',
'IPAddressField': 'char(15)',
'ManyToManyField': None,
'NullBooleanField': 'integer',
'OneToOneField': 'integer',
'PhoneNumberField': 'varchar(20)',
'PositiveIntegerField': 'integer',
'PositiveSmallIntegerField': 'smallint',
'SlugField': 'varchar(50)',
'SmallIntegerField': 'smallint',
'TextField': 'long',
'TimeField': 'timestamp',
'URLField': 'varchar(200)',
'USStateField': 'varchar(2)',
}

View File

@ -0,0 +1,52 @@
from django.db import transaction
from django.db.backends.oracle.base import quote_name
import re
foreign_key_re = re.compile(r"\sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REFERENCES `([^`]*)` \(`([^`]*)`\)")
def get_table_list(cursor):
"Returns a list of table names in the current database."
cursor.execute("SELECT TABLE_NAME FROM USER_TABLES")
return [row[0] for row in cursor.fetchall()]
def get_table_description(cursor, table_name):
return table_name
def _name_to_index(cursor, table_name):
"""
Returns a dictionary of {field_name: field_index} for the given table.
Indexes are 0-based.
"""
return dict([(d[0], i) for i, d in enumerate(get_table_description(cursor, table_name))])
def get_relations(cursor, table_name):
"""
Returns a dictionary of {field_index: (field_index_other_table, other_table)}
representing all relationships to the given table. Indexes are 0-based.
"""
raise NotImplementedError
def get_indexes(cursor, table_name):
"""
Returns a dictionary of fieldname -> infodict for the given table,
where each infodict is in the format:
{'primary_key': boolean representing whether it's the primary key,
'unique': boolean representing whether it's a unique index}
"""
raise NotImplementedError
# Maps type codes to Django Field types.
DATA_TYPES_REVERSE = {
16: 'BooleanField',
21: 'SmallIntegerField',
23: 'IntegerField',
25: 'TextField',
869: 'IPAddressField',
1043: 'CharField',
1082: 'DateField',
1083: 'TimeField',
1114: 'DateTimeField',
1184: 'DateTimeField',
1266: 'TimeField',
1700: 'FloatField',
}

View File

@ -5,7 +5,11 @@ Requires psycopg 1: http://initd.org/projects/psycopg1
""" """
from django.db.backends import util from django.db.backends import util
import psycopg as Database try:
import psycopg as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading psycopg module: %s" % e
DatabaseError = Database.DatabaseError DatabaseError = Database.DatabaseError

View File

@ -5,7 +5,11 @@ Requires psycopg 2: http://initd.org/projects/psycopg2
""" """
from django.db.backends import util from django.db.backends import util
import psycopg2 as Database try:
import psycopg2 as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading psycopg2 module: %s" % e
DatabaseError = Database.DatabaseError DatabaseError = Database.DatabaseError

View File

@ -3,7 +3,11 @@ SQLite3 backend for django. Requires pysqlite2 (http://pysqlite.org/).
""" """
from django.db.backends import util from django.db.backends import util
from pysqlite2 import dbapi2 as Database try:
from pysqlite2 import dbapi2 as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading pysqlite2 module: %s" % e
DatabaseError = Database.DatabaseError DatabaseError = Database.DatabaseError

View File

@ -269,8 +269,8 @@ class Model(object):
q._params.extend([param, param, getattr(self, self._meta.pk.attname)]) q._params.extend([param, param, getattr(self, self._meta.pk.attname)])
try: try:
return q[0] return q[0]
except IndexError, e: except IndexError:
raise self.DoesNotExist, e.args raise self.DoesNotExist, "%s matching query does not exist." % self.__class__._meta.object_name
def _get_next_or_previous_in_order(self, is_next): def _get_next_or_previous_in_order(self, is_next):
cachename = "__%s_order_cache" % is_next cachename = "__%s_order_cache" % is_next

View File

@ -17,9 +17,15 @@ def get_apps():
_app_list = [] _app_list = []
for app_name in settings.INSTALLED_APPS: for app_name in settings.INSTALLED_APPS:
try: try:
_app_list.append(__import__(app_name, '', '', ['models']).models) mod = __import__(app_name, '', '', ['models'])
except (ImportError, AttributeError), e: except ImportError:
pass pass # Assume this app doesn't have a models.py in it.
# GOTCHA: It may have a models.py that raises ImportError.
else:
try:
_app_list.append(mod.models)
except AttributeError:
pass # This app doesn't have a models.py in it.
return _app_list return _app_list
def get_app(app_label): def get_app(app_label):

View File

@ -95,6 +95,9 @@ class QuerySet(object):
def __getitem__(self, k): def __getitem__(self, k):
"Retrieve an item or slice from the set of results." "Retrieve an item or slice from the set of results."
assert (not isinstance(k, slice) and (k >= 0)) \
or (isinstance(k, slice) and (k.start is None or k.start >= 0) and (k.stop is None or k.stop >= 0)), \
"Negative indexing is not supported."
if self._result_cache is None: if self._result_cache is None:
if isinstance(k, slice): if isinstance(k, slice):
# Offset: # Offset:
@ -129,7 +132,7 @@ class QuerySet(object):
return list(self._clone(_offset=offset, _limit=limit))[::k.step] return list(self._clone(_offset=offset, _limit=limit))[::k.step]
else: else:
try: try:
return self._clone(_offset=k, _limit=1).get() return list(self._clone(_offset=k, _limit=1))[0]
except self.model.DoesNotExist, e: except self.model.DoesNotExist, e:
raise IndexError, e.args raise IndexError, e.args
else: else:
@ -193,6 +196,7 @@ class QuerySet(object):
def get(self, *args, **kwargs): def get(self, *args, **kwargs):
"Performs the SELECT and returns a single object matching the given keyword arguments." "Performs the SELECT and returns a single object matching the given keyword arguments."
clone = self.filter(*args, **kwargs) clone = self.filter(*args, **kwargs)
# clean up SQL by removing unneeded ORDER BY
if not clone._order_by: if not clone._order_by:
clone._order_by = () clone._order_by = ()
obj_list = list(clone) obj_list = list(clone)
@ -287,22 +291,26 @@ class QuerySet(object):
def filter(self, *args, **kwargs): def filter(self, *args, **kwargs):
"Returns a new QuerySet instance with the args ANDed to the existing set." "Returns a new QuerySet instance with the args ANDed to the existing set."
return self._filter_or_exclude(Q, *args, **kwargs) return self._filter_or_exclude(None, *args, **kwargs)
def exclude(self, *args, **kwargs): def exclude(self, *args, **kwargs):
"Returns a new QuerySet instance with NOT (args) ANDed to the existing set." "Returns a new QuerySet instance with NOT (args) ANDed to the existing set."
return self._filter_or_exclude(QNot, *args, **kwargs) return self._filter_or_exclude(QNot, *args, **kwargs)
def _filter_or_exclude(self, qtype, *args, **kwargs): def _filter_or_exclude(self, mapper, *args, **kwargs):
# mapper is a callable used to transform Q objects,
# or None for identity transform
if mapper is None:
mapper = lambda x: x
if len(args) > 0 or len(kwargs) > 0: if len(args) > 0 or len(kwargs) > 0:
assert self._limit is None and self._offset is None, \ assert self._limit is None and self._offset is None, \
"Cannot filter a query once a slice has been taken." "Cannot filter a query once a slice has been taken."
clone = self._clone() clone = self._clone()
if len(kwargs) > 0: if len(kwargs) > 0:
clone._filters = clone._filters & qtype(**kwargs) clone._filters = clone._filters & mapper(Q(**kwargs))
if len(args) > 0: if len(args) > 0:
clone._filters = clone._filters & reduce(operator.and_, args) clone._filters = clone._filters & reduce(operator.and_, map(mapper, args))
return clone return clone
def complex_filter(self, filter_obj): def complex_filter(self, filter_obj):
@ -314,7 +322,7 @@ class QuerySet(object):
if hasattr(filter_obj, 'get_sql'): if hasattr(filter_obj, 'get_sql'):
return self._filter_or_exclude(None, filter_obj) return self._filter_or_exclude(None, filter_obj)
else: else:
return self._filter_or_exclude(Q, **filter_obj) return self._filter_or_exclude(None, **filter_obj)
def select_related(self, true_or_false=True): def select_related(self, true_or_false=True):
"Returns a new QuerySet instance with '_select_related' modified." "Returns a new QuerySet instance with '_select_related' modified."
@ -578,9 +586,12 @@ class Q(object):
class QNot(Q): class QNot(Q):
"Encapsulates NOT (...) queries as objects" "Encapsulates NOT (...) queries as objects"
def __init__(self, q):
"Creates a negation of the q object passed in."
self.q = q
def get_sql(self, opts): def get_sql(self, opts):
tables, joins, where, params = super(QNot, self).get_sql(opts) tables, joins, where, params = self.q.get_sql(opts)
where2 = ['(NOT (%s))' % " AND ".join(where)] where2 = ['(NOT (%s))' % " AND ".join(where)]
return tables, joins, where2, params return tables, joins, where2, params

View File

@ -34,7 +34,6 @@ def object_list(request, queryset, paginate_by=None, allow_empty=False,
number of objects, total number of objects, total
""" """
queryset = queryset._clone() queryset = queryset._clone()
model = queryset.model
if paginate_by: if paginate_by:
paginator = ObjectPaginator(queryset, paginate_by) paginator = ObjectPaginator(queryset, paginate_by)
page = request.GET.get('page', 1) page = request.GET.get('page', 1)
@ -71,6 +70,7 @@ def object_list(request, queryset, paginate_by=None, allow_empty=False,
else: else:
c[key] = value c[key] = value
if not template_name: if not template_name:
model = queryset.model
template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower()) template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower())
t = template_loader.get_template(template_name) t = template_loader.get_template(template_name)
return HttpResponse(t.render(c)) return HttpResponse(t.render(c))

View File

@ -209,12 +209,12 @@ The per-site cache
================== ==================
Once the cache is set up, the simplest way to use caching is to cache your Once the cache is set up, the simplest way to use caching is to cache your
entire site. Just add ``django.middleware.cache.CacheMiddleware`` to your entire site. Just add ``'django.middleware.cache.CacheMiddleware'`` to your
``MIDDLEWARE_CLASSES`` setting, as in this example:: ``MIDDLEWARE_CLASSES`` setting, as in this example::
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
"django.middleware.cache.CacheMiddleware", 'django.middleware.cache.CacheMiddleware',
"django.middleware.common.CommonMiddleware", 'django.middleware.common.CommonMiddleware',
) )
(The order of ``MIDDLEWARE_CLASSES`` matters. See "Order of MIDDLEWARE_CLASSES" (The order of ``MIDDLEWARE_CLASSES`` matters. See "Order of MIDDLEWARE_CLASSES"

View File

@ -17,7 +17,7 @@ middleware into your list of installed middleware.
How to use it How to use it
============= =============
Add the middleware ``"django.contrib.csrf.middleware.CsrfMiddleware"`` to Add the middleware ``'django.contrib.csrf.middleware.CsrfMiddleware'`` to
your list of middleware classes, ``MIDDLEWARE_CLASSES``. It needs to process your list of middleware classes, ``MIDDLEWARE_CLASSES``. It needs to process
the response after the SessionMiddleware, so must come before it in the the response after the SessionMiddleware, so must come before it in the
list. It also must process the response before things like compression list. It also must process the response before things like compression

View File

@ -23,10 +23,10 @@ name. For example, here's the default ``MIDDLEWARE_CLASSES`` created by
``django-admin.py startproject``:: ``django-admin.py startproject``::
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
"django.middleware.common.CommonMiddleware", 'django.middleware.common.CommonMiddleware',
"django.contrib.sessions.middleware.SessionMiddleware", 'django.contrib.sessions.middleware.SessionMiddleware',
"django.contrib.auth.middleware.AuthenticationMiddleware", 'django.contrib.auth.middleware.AuthenticationMiddleware',
"django.middleware.doc.XViewMiddleware", '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``,

View File

@ -14,7 +14,7 @@ Sessions are implemented via middleware_.
Turn session functionality on and off by editing the ``MIDDLEWARE_CLASSES`` Turn session functionality on and off by editing the ``MIDDLEWARE_CLASSES``
setting. To activate sessions, make sure ``MIDDLEWARE_CLASSES`` contains setting. To activate sessions, make sure ``MIDDLEWARE_CLASSES`` contains
``"django.contrib.sessions.middleware.SessionMiddleware"``. ``'django.contrib.sessions.middleware.SessionMiddleware'``.
The default ``settings.py`` created by ``django-admin.py startproject`` has The default ``settings.py`` created by ``django-admin.py startproject`` has
``SessionMiddleware`` activated. ``SessionMiddleware`` activated.

View File

@ -308,4 +308,4 @@ Here's how Django uses the sites framework:
.. _redirects framework: http://www.djangoproject.com/documentation/redirects/ .. _redirects framework: http://www.djangoproject.com/documentation/redirects/
.. _flatpages framework: http://www.djangoproject.com/documentation/flatpages/ .. _flatpages framework: http://www.djangoproject.com/documentation/flatpages/
.. _syndication framework: http://www.djangoproject.com/documentation/syndication/ .. _syndication framework: http://www.djangoproject.com/documentation/syndication/
.. _authentication framework: http://www.djangoproject.com/documentation/syndication/ .. _authentication framework: http://www.djangoproject.com/documentation/authentication/

View File

@ -784,27 +784,23 @@ In Python 2.4, the decorator syntax also works::
Inclusion tags Inclusion tags
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
Another type of template tag that is sometimes useful is when you want to Another common type of template tag is the type that displays some data by
display some data that is computed at render time in a template fragment. For rendering *another* template. For example, Django's admin interface uses custom
example, in Django's admin interface, there is a line of buttons along the template tags to display the buttons along the botton of the "add/change" form
bottom of the `create/edit record` screen. These buttons always look the same, pages. Those buttons always look the same, but the link targets change depending
but the link targets change depending upon the object being edited. So they on the object being edited -- so they're a perfect case for using a small
are a perfect example for using a small template that is filled in with template that is filled with details from the current object. (In the admin's
details from the current object. To save typing, it would also be nice if we case, this is the ``submit_row`` tag.)
could wrap this whole display up in a single tag (in the admin templates this
is the ``submit_row`` tag).
We call these sorts of tags `inclusion tags`. In your template, you pass in These sorts of tags are called `inclusion tags`.
any appropriate arguments and the tag uses those arguments, together with the
current context to render a template and include the result in the output.
Writing inclusion tags is probably best demonstrated by example. We will write Writing inclusion tags is probably best demonstrated by example. Let's write a
a tag that outputs a list of choices for a Poll object, such as was created in tag that outputs a list of choices for a given ``Poll`` object, such as was
the tutorials_. We will use this tag like this:: created in the tutorials_. We'll use the tag like this::
{{ show_results poll }} {% show_results poll %}
and the output will be something like this:: ...and the output will be something like this::
<ul> <ul>
<li>First choice</li> <li>First choice</li>
@ -812,21 +808,18 @@ and the output will be something like this::
<li>Third choice</li> <li>Third choice</li>
</ul> </ul>
First, we define the function which takes the argument and produces a First, define the function that takes the argument and produces a dictionary of
dictionary of data for the result. The important point here is we only need to data for the result. The important point here is we only need to return a
return a dictionary, not anything more complex. This will be used to substitue dictionary, not anything more complex. This will be used as a template context
for values in the template fragment, just as when templates are used for the template fragment. Example::
elsewhere.
::
def show_results(poll): def show_results(poll):
choices = poll.choice_set.all() choices = poll.choice_set.all()
return {'choices': choices} return {'choices': choices}
We also need to create the template that is used to render the output. This Next, create the template used to render the tag's output. This template is a
template is a fixed feature of the tag: the tag writer specifies it, not the fixed feature of the tag: the tag writer specifies it, not the template
template designer. In our case, the template is very simple:: designer. Following our example, the template is very simple::
<ul> <ul>
{% for choice in choices %} {% for choice in choices %}
@ -834,50 +827,33 @@ template designer. In our case, the template is very simple::
{% endfor %} {% endfor %}
</ul> </ul>
Now we can create the inclusion tag. Suppose the above template is in a file Now, create and register the inclusion tag by calling the ``inclusion_tag()``
called ``results.html`` in a directory that is searched by the template method on a ``Library`` object. Following our example, if the above template is
loader. We register our new tag similarly to a normal tag. in a file called ``results.html`` in a directory that's searched by the template
loader, we'd register the tag like this::
::
# Here, register is a django.template.Library instance, as before # Here, register is a django.template.Library instance, as before
register.inclusion_tag('results.html')(show_results) register.inclusion_tag('results.html')(show_results)
As always, Python 2.4 decorator syntax works as well, so we could have As always, Python 2.4 decorator syntax works as well, so we could have
written written::
::
@inclusion_tag('results.html') @inclusion_tag('results.html')
def show_results(poll): def show_results(poll):
... ...
when first creating the function. ...when first creating the function.
In some cases, an inclusion tag might require a large number of arguments to Sometimes, your inclusion tags might require a large number of arguments,
display itself properly. In essence, it would depend largely on the current making it a pain for template authors to pass in all the arguments and remember
context it was being rendered with. We can make these sorts of tags easier to their order. To solve this, Django provides a ``takes_context`` option for
write by telling the ``inclusion_tag`` function that the whole context inclusion tags. If you specify ``takes_context`` in creating a template tag,
should be passed in as an argument to the function. This will be done the tag will have no required arguments, and the underlying Python function
invisibly as far as the template tag user is concerned: they will not need to will have one argument -- the template context as of when the tag was called.
do anything to pass in the context.
For example, suppose we are writing an inclusion tag that will always be used For example, say you're writing an inclusion tag that will always be used in a
in a context that contains ``home_link`` and ``home_title`` variables that context that contains ``home_link`` and ``home_title`` variables that point
point back to the main page. We can write a tag that is used like this:: back to the main page. Here's what the Python function would look like::
{{ jump_link }}
and renders this::
Jump directly to <a href="http://example.com/home">Home</a>
The tag function is almost as simple as before. This time it takes no
arguments except the ``context`` (and the parameter `must` be called
``context`` in this case; the special parameter named is used internally by
Django to fill in the values correctly).
::
# The first argument *must* be called "context" here. # The first argument *must* be called "context" here.
def jump_link(context): def jump_link(context):
@ -885,19 +861,28 @@ Django to fill in the values correctly).
'link': context['home_link'], 'link': context['home_link'],
'title': context['home_title'], 'title': context['home_title'],
} }
# Register the custom tag as an inclusion tag with takes_context=True.
register.inclusion_tag('link.html', takes_context=True)(jump_link)
Our template is very simple again:: (Note that the first parameter to the function *must* be called ``context``.)
In that ``register.inclusion_tag()`` line, we specified ``takes_context=True``
and the name of the template. Here's what the template ``link.html`` might look
like::
Jump directly to <a href="{{ link }}">{{ title }}</a>. Jump directly to <a href="{{ link }}">{{ title }}</a>.
Assuming the template is in a file called ``link.html``, we register this new Then, any time you want to use that custom tag, load its library and call it
tag as follows:: without any arguments, like so::
register.inclusion_tag('link.html', takes_context = True)(jump_link) {% jump_link %}
The ``takes_context`` parameter here defaults to *False*. When it is set to Note that when you're using ``takes_context=True``, there's no need to pass
*True*, our tag is passed the implicit context as in this example. That is the arguments to the template tag. It automatically gets access to the context.
only difference between this case and our previous use of ``inclusion_tag``.
The ``takes_context`` parameter defaults to ``False``. When it's set to *True*,
the tag is passed the context object, as in this example. That's the only
difference between this case and the previous ``inclusion_tag`` example.
.. _tutorials: http://www.djangoproject.com/documentation/tutorial1/#creating-models .. _tutorials: http://www.djangoproject.com/documentation/tutorial1/#creating-models

View File

@ -32,10 +32,10 @@ To activate this feature, just add the ``TransactionMiddleware`` middleware to
your ``MIDDLEWARE_CLASSES`` setting:: your ``MIDDLEWARE_CLASSES`` setting::
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
"django.contrib.sessions.middleware.SessionMiddleware", 'django.contrib.sessions.middleware.SessionMiddleware',
"django.middleware.common.CommonMiddleware", 'django.middleware.common.CommonMiddleware',
"django.middleware.cache.CacheMiddleware", 'django.middleware.cache.CacheMiddleware',
"django.middleware.transaction.TransactionMiddleware", 'django.middleware.transaction.TransactionMiddleware',
) )
The order is quite important. The transaction middleware applies not only to The order is quite important. The transaction middleware applies not only to

View File

@ -284,8 +284,8 @@ Here's what it looks like at this point:
:alt: Polls change list page :alt: Polls change list page
:target: http://media.djangoproject.com/img/doc/tutorial/admin04.png :target: http://media.djangoproject.com/img/doc/tutorial/admin04.png
By default, Django displays the ``repr()`` of each object. But it'd be more By default, Django displays the ``str()`` of each object. But sometimes it'd
helpful if we could display individual fields. To do that, use the be more helpful if we could display individual fields. To do that, use the
``list_display`` option, which is a tuple of field names to display, as columns, ``list_display`` option, which is a tuple of field names to display, as columns,
on the change list page for the object:: on the change list page for the object::

View File

@ -22,8 +22,10 @@ setup(
'locale/el/LC_MESSAGES/*', 'locale/el/LC_MESSAGES/*',
'locale/en/LC_MESSAGES/*', 'locale/en/LC_MESSAGES/*',
'locale/es/LC_MESSAGES/*', 'locale/es/LC_MESSAGES/*',
'locale/es_AR/LC_MESSAGES/*',
'locale/fr/LC_MESSAGES/*', 'locale/fr/LC_MESSAGES/*',
'locale/gl/LC_MESSAGES/*', 'locale/gl/LC_MESSAGES/*',
'locale/hu/LC_MESSAGES/*',
'locale/he/LC_MESSAGES/*', 'locale/he/LC_MESSAGES/*',
'locale/is/LC_MESSAGES/*', 'locale/is/LC_MESSAGES/*',
'locale/it/LC_MESSAGES/*', 'locale/it/LC_MESSAGES/*',

View File

@ -283,6 +283,16 @@ Traceback (most recent call last):
... ...
AssertionError: Cannot combine queries once a slice has been taken. AssertionError: Cannot combine queries once a slice has been taken.
# Negative slices are not supported, due to database constraints.
# (hint: inverting your ordering might do what you need).
>>> Article.objects.all()[-1]
Traceback (most recent call last):
...
AssertionError: Negative indexing is not supported.
>>> Article.objects.all()[0:-5]
Traceback (most recent call last):
...
AssertionError: Negative indexing is not supported.
# An Article instance doesn't have access to the "objects" attribute. # An Article instance doesn't have access to the "objects" attribute.
# That's only available on the class. # That's only available on the class.

View File

@ -89,6 +89,10 @@ Hello and goodbye
>>> Article.objects.filter(Q(headline__startswith='Hello')).in_bulk([1,2]) >>> Article.objects.filter(Q(headline__startswith='Hello')).in_bulk([1,2])
{1: Hello} {1: Hello}
# Demonstrating exclude with a Q object
>>> Article.objects.exclude(Q(headline__startswith='Hello'))
[Goodbye]
# The 'complex_filter' method supports framework features such as # The 'complex_filter' method supports framework features such as
# 'limit_choices_to' which normally take a single dictionary of lookup arguments # 'limit_choices_to' which normally take a single dictionary of lookup arguments
# but need to support arbitrary queries via Q objects too. # but need to support arbitrary queries via Q objects too.

View File

@ -56,6 +56,10 @@ API_TESTS = """
>>> Article.objects.order_by('headline')[1:3] >>> Article.objects.order_by('headline')[1:3]
[Article 2, Article 3] [Article 2, Article 3]
# Getting a single item should work too:
>>> Article.objects.all()[0]
Article 4
# Use '?' to order randomly. (We're using [...] in the output to indicate we # Use '?' to order randomly. (We're using [...] in the output to indicate we
# don't know what order the output will be in. # don't know what order the output will be in.
>>> Article.objects.order_by('?') >>> Article.objects.order_by('?')

View File

@ -20,6 +20,17 @@ def log_error(model_name, title, description):
MODEL_TEST_DIR = os.path.join(os.path.dirname(__file__), MODEL_TESTS_DIR_NAME) MODEL_TEST_DIR = os.path.join(os.path.dirname(__file__), MODEL_TESTS_DIR_NAME)
ALWAYS_INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.comments',
'django.contrib.contenttypes',
'django.contrib.flatpages',
'django.contrib.redirects',
'django.contrib.sessions',
'django.contrib.sites',
]
def get_test_models(): def get_test_models():
return [f for f in os.listdir(MODEL_TEST_DIR) if not f.startswith('__init__') and not f.startswith('.')] return [f for f in os.listdir(MODEL_TEST_DIR) if not f.startswith('__init__') and not f.startswith('.')]
@ -78,7 +89,7 @@ class TestRunner:
settings.INSTALLED_APPS settings.INSTALLED_APPS
# Manually set INSTALLED_APPS to point to the test models. # Manually set INSTALLED_APPS to point to the test models.
settings.INSTALLED_APPS = [MODEL_TESTS_DIR_NAME + '.' + a for a in get_test_models()] settings.INSTALLED_APPS = ALWAYS_INSTALLED_APPS + [MODEL_TESTS_DIR_NAME + '.' + a for a in get_test_models()]
# Manually set DEBUG = False. # Manually set DEBUG = False.
settings.DEBUG = False settings.DEBUG = False