mirror of
https://github.com/django/django.git
synced 2025-07-05 10:19:20 +00:00
i18n: merged to [931] from trunk
git-svn-id: http://code.djangoproject.com/svn/django/branches/i18n@932 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
commit
f99782e48e
82
django/conf/admin_media/css/changelists.css
vendored
82
django/conf/admin_media/css/changelists.css
vendored
@ -1,60 +1,44 @@
|
|||||||
/*
|
/*
|
||||||
______________________________
|
DJANGO Admin Changelist Styles
|
||||||
DJANGO
|
by Wilson Miner wilson@lawrence.com
|
||||||
Admin Changelist Styles
|
Copyright (c) 2005 Lawrence Journal-World
|
||||||
|
|
||||||
Extends base.css
|
|
||||||
|
|
||||||
by Wilson Miner
|
|
||||||
wilson@lawrence.com
|
|
||||||
|
|
||||||
Copyright (c) 2005
|
|
||||||
Lawrence Journal-World
|
|
||||||
|
|
||||||
645 New Hampshire
|
|
||||||
Lawrence, KS 66044
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#changelist {position:relative; width:100%;}
|
#changelist { position:relative; width:100%; }
|
||||||
#changelist table {width:100%;}
|
#changelist table { width:100%; }
|
||||||
.change-list .filtered table { border-right:1px solid #ddd, width:100%; }
|
.change-list .filtered table { border-right:1px solid #ddd; }
|
||||||
.change-list .filtered {min-height:400px; _height:400px;}
|
.change-list .filtered { min-height:400px; _height:400px; }
|
||||||
.change-list .filtered {background:white url(../img/admin/changelist-bg.gif) top right repeat-y !important;}
|
.change-list .filtered { background:white url(../img/admin/changelist-bg.gif) top right repeat-y !important; }
|
||||||
.change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {margin-right:160px !important; width:auto !important; }
|
.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { margin-right:160px !important; width:auto !important; }
|
||||||
.change-list .filtered table tbody th {padding-right:10px;}
|
.change-list .filtered table tbody th { padding-right:10px; }
|
||||||
#changelist .toplinks {border-bottom:1px solid #ccc !important;}
|
#changelist .toplinks { border-bottom:1px solid #ccc !important; }
|
||||||
#changelist .paginator { color:#666; border-top:1px solid #eee; border-bottom:1px solid #eee; background:white url(../img/admin/nav-bg.gif) 0 180% repeat-x; overflow:hidden;}
|
#changelist .paginator { color:#666; border-top:1px solid #eee; border-bottom:1px solid #eee; background:white url(../img/admin/nav-bg.gif) 0 180% repeat-x; overflow:hidden; }
|
||||||
.change-list .filtered .paginator { border-right:1px solid #ddd; }
|
.change-list .filtered .paginator { border-right:1px solid #ddd; }
|
||||||
|
|
||||||
/* CHANGELIST TABLES */
|
/* CHANGELIST TABLES */
|
||||||
|
#changelist table thead th { white-space:nowrap; }
|
||||||
#changelist table thead th {white-space:nowrap;}
|
#changelist table tbody td { border-left: 1px solid #ddd; }
|
||||||
#changelist table tbody td {border-left: 1px solid #ddd;}
|
#changelist table tfoot { color: #666; }
|
||||||
#changelist table tfoot {color: #666;}
|
|
||||||
|
|
||||||
/* TOOLBAR */
|
/* TOOLBAR */
|
||||||
|
#changelist #toolbar { padding:3px; border-bottom:1px solid #ddd; background:#e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x; color:#666; }
|
||||||
#changelist #toolbar {padding:3px; border-bottom:1px solid #ddd; background:#e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x; color:#666;}
|
#changelist #toolbar form input { font-size:11px; padding:1px 2px; }
|
||||||
#changelist #toolbar form input {font-size:11px; padding:1px 2px;}
|
#changelist #toolbar form #searchbar { padding:2px; }
|
||||||
#changelist #toolbar form #searchbar {padding:2px;}
|
#changelist #changelist-search img { vertical-align:middle; }
|
||||||
#changelist #changelist-search img {vertical-align:middle;}
|
|
||||||
|
|
||||||
/* FILTER COLUMN */
|
/* FILTER COLUMN */
|
||||||
|
#changelist-filter { position:absolute; top:0; right:0; z-index:1000; width:160px; border-left:1px solid #ddd; background:#efefef; margin:0; }
|
||||||
#changelist-filter {position:absolute; top:0; right:0; z-index:1000; width:160px; border-left:1px solid #ddd; background:#efefef; margin:0;}
|
#changelist-filter h2 { font-size:11px; padding:2px 5px; border-bottom:1px solid #ddd; }
|
||||||
#changelist-filter h2 {font-size:11px; padding:2px 5px; border-bottom:1px solid #ddd;}
|
#changelist-filter h3 { font-size:12px; margin-bottom:0; }
|
||||||
#changelist-filter h3 {font-size:12px; margin-bottom:0;}
|
#changelist-filter ul { padding-left:0;margin-left:10px;_margin-right:-10px; }
|
||||||
#changelist-filter ul {padding-left:0;margin-left:10px;_margin-right:-10px;}
|
#changelist-filter li { list-style-type:none; margin-left:0; padding-left:0; }
|
||||||
#changelist-filter li {list-style-type:none; margin-left:0; padding-left:0;}
|
#changelist-filter a { color:#999; }
|
||||||
#changelist-filter a {color:#999;}
|
#changelist-filter a:hover { color:#036; }
|
||||||
#changelist-filter a:hover {color:#036;}
|
#changelist-filter li.selected { border-left:5px solid #ccc; padding-left:5px;margin-left:-10px; }
|
||||||
#changelist-filter li.selected {border-left:5px solid #ccc; padding-left:5px;margin-left:-10px;}
|
#changelist-filter li.selected a { color:#5b80b2 !important; }
|
||||||
#changelist-filter li.selected a {color:#5b80b2 !important;}
|
|
||||||
|
|
||||||
/* DATE DRILLDOWN */
|
/* DATE DRILLDOWN */
|
||||||
|
.change-list ul.toplinks { display:block; background:white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x; border-top:1px solid white; float:left; padding:0 !important; margin:0 !important; width:100%; }
|
||||||
.change-list ul.toplinks {display:block; background:white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x; border-top:1px solid white; float:left; padding:0 !important; margin:0 !important; width:100%;}
|
.change-list ul.toplinks li { float: left; width: 9em; padding:3px 6px; font-weight: bold; list-style-type:none; }
|
||||||
.change-list ul.toplinks li {float: left; width: 9em; padding:3px 6px; font-weight: bold; list-style-type:none;}
|
.change-list ul.toplinks .date-back a { color:#999; }
|
||||||
.change-list ul.toplinks .date-back a {color:#999;}
|
.change-list ul.toplinks .date-back a:hover { color:#036; }
|
||||||
.change-list ul.toplinks .date-back a:hover {color:#036;}
|
|
||||||
|
69
django/conf/admin_media/css/global.css
vendored
69
django/conf/admin_media/css/global.css
vendored
@ -1,45 +1,17 @@
|
|||||||
/*
|
/*
|
||||||
______________________________
|
DJANGO Admin Global Styles
|
||||||
DJANGO
|
by Wilson Miner wilson@lawrence.com
|
||||||
Admin Global Styles
|
Copyright (c) 2005 Lawrence Journal-World
|
||||||
|
|
||||||
Extends base.css
|
|
||||||
|
|
||||||
by Wilson Miner
|
|
||||||
wilson@lawrence.com
|
|
||||||
|
|
||||||
Copyright (c) 2005
|
|
||||||
Lawrence Journal-World
|
|
||||||
|
|
||||||
645 New Hampshire
|
|
||||||
Lawrence, KS 66044
|
|
||||||
|
|
||||||
______________________________
|
|
||||||
SITE DIMENSIONS
|
|
||||||
|
|
||||||
Site Width: 768px
|
|
||||||
Content Width: 750px
|
|
||||||
Main Column: 580px
|
|
||||||
Sidebar: 220px
|
|
||||||
|
|
||||||
______________________________
|
|
||||||
COLORS
|
|
||||||
|
|
||||||
Blue #5b80b2
|
|
||||||
Dark Blue #036
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
body { margin:0; padding:0; font-family:"Lucida Grande","Bitstream Vera Sans",Verdana,Arial,sans-serif; color:#333; }
|
body { margin:0; padding:0; font-family:"Lucida Grande","Bitstream Vera Sans",Verdana,Arial,sans-serif; color:#333; }
|
||||||
|
|
||||||
/* LINKS */
|
/* LINKS */
|
||||||
|
|
||||||
a:link, a:visited { color: #5b80b2; text-decoration:none; }
|
a:link, a:visited { color: #5b80b2; text-decoration:none; }
|
||||||
a:hover { color: #036; }
|
a:hover { color: #036; }
|
||||||
a img { border:none; }
|
a img { border:none; }
|
||||||
|
|
||||||
/* GLOBAL DEFAULTS */
|
/* GLOBAL DEFAULTS */
|
||||||
|
|
||||||
p, ol, ul, dl { margin:.2em 0 .8em 0; font-size:12px; }
|
p, ol, ul, dl { margin:.2em 0 .8em 0; font-size:12px; }
|
||||||
p { padding:0; line-height:140%; }
|
p { padding:0; line-height:140%; }
|
||||||
h1,h2,h3,h4,h5 { font-weight:bold; }
|
h1,h2,h3,h4,h5 { font-weight:bold; }
|
||||||
@ -67,7 +39,6 @@ div.system-message { background: #ffc; margin: 10px; padding: 6px 8px; font-size
|
|||||||
div.system-message p.system-message-title { padding:4px 5px 4px 25px; margin:0; color:red;background:#ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat; }
|
div.system-message p.system-message-title { padding:4px 5px 4px 25px; margin:0; color:red;background:#ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat; }
|
||||||
|
|
||||||
/* PAGE STRUCTURE */
|
/* PAGE STRUCTURE */
|
||||||
|
|
||||||
#container { position:relative; width:100%; min-width:720px; }
|
#container { position:relative; width:100%; min-width:720px; }
|
||||||
#header { text-align:left; min-height:55px; _height:55px; }
|
#header { text-align:left; min-height:55px; _height:55px; }
|
||||||
#content { margin:10px 15px; }
|
#content { margin:10px 15px; }
|
||||||
@ -76,13 +47,6 @@ div.system-message p.system-message-title { padding:4px 5px 4px 25px; margin:0;
|
|||||||
#footer { clear:both; padding:10px; }
|
#footer { clear:both; padding:10px; }
|
||||||
|
|
||||||
/* COLUMN TYPES */
|
/* COLUMN TYPES */
|
||||||
/*
|
|
||||||
colM = Main | M |
|
|
||||||
colMS = Main, Sidebar | M |S|
|
|
||||||
colSM = Sidebar, Main |S| M |
|
|
||||||
flex = single-column, liquid width
|
|
||||||
superwide = single-column, extra-wide fixed width
|
|
||||||
*/
|
|
||||||
.colMS, .colM, .colSM, .colM #content-main, .colM #content-main .xfull { width:758px; } /* master site width for fixed-width pages */
|
.colMS, .colM, .colSM, .colM #content-main, .colM #content-main .xfull { width:758px; } /* master site width for fixed-width pages */
|
||||||
.colMS #content-main, .colSM #content-main, .colMS #content-main .xfull, .colSM #content-main .xfull { width:519px; } /* main column width for 2-column pages */
|
.colMS #content-main, .colSM #content-main, .colMS #content-main .xfull, .colSM #content-main .xfull { width:519px; } /* main column width for 2-column pages */
|
||||||
.colMS #content-related, .colSM #content-related, .colSMS #content-related { width:220px; } /* sidebar column width */
|
.colMS #content-related, .colSM #content-related, .colSMS #content-related { width:220px; } /* sidebar column width */
|
||||||
@ -94,7 +58,6 @@ div.system-message p.system-message-title { padding:4px 5px 4px 25px; margin:0;
|
|||||||
.subcol { float:left; width:46%; margin-right:15px; }
|
.subcol { float:left; width:46%; margin-right:15px; }
|
||||||
|
|
||||||
/* WIDTHS */
|
/* WIDTHS */
|
||||||
|
|
||||||
.x50 { width:50px; }
|
.x50 { width:50px; }
|
||||||
.x75 { width:75px; }
|
.x75 { width:75px; }
|
||||||
.x100 { width:100px; }
|
.x100 { width:100px; }
|
||||||
@ -106,7 +69,6 @@ div.system-message p.system-message-title { padding:4px 5px 4px 25px; margin:0;
|
|||||||
.x500 { width:500px; }
|
.x500 { width:500px; }
|
||||||
|
|
||||||
/* HEADER */
|
/* HEADER */
|
||||||
|
|
||||||
#header { background:#417690; color:#ffc; }
|
#header { background:#417690; color:#ffc; }
|
||||||
#header a:link, #header a:visited { color:white; }
|
#header a:link, #header a:visited { color:white; }
|
||||||
#header a:hover { text-decoration:underline; }
|
#header a:hover { text-decoration:underline; }
|
||||||
@ -117,12 +79,10 @@ div.system-message p.system-message-title { padding:4px 5px 4px 25px; margin:0;
|
|||||||
|
|
||||||
|
|
||||||
/* SIDEBAR */
|
/* SIDEBAR */
|
||||||
|
|
||||||
#content-related h3 { font-size:12px; color:#666; margin-bottom:3px; }
|
#content-related h3 { font-size:12px; color:#666; margin-bottom:3px; }
|
||||||
#content-related h4 { font-size:11px; }
|
#content-related h4 { font-size:11px; }
|
||||||
|
|
||||||
/* TABLES */
|
/* TABLES */
|
||||||
|
|
||||||
table { border-collapse:collapse; border-color:#ccc; }
|
table { border-collapse:collapse; border-color:#ccc; }
|
||||||
td, th { font-size:11px; line-height:13px; border-bottom:1px solid #eee; vertical-align:top; padding:5px; font-family:"Lucida Grande", Verdana, Arial, sans-serif; }
|
td, th { font-size:11px; line-height:13px; border-bottom:1px solid #eee; vertical-align:top; padding:5px; font-family:"Lucida Grande", Verdana, Arial, sans-serif; }
|
||||||
th { text-align:left; font-size:12px; }
|
th { text-align:left; font-size:12px; }
|
||||||
@ -141,7 +101,6 @@ table#change-history { width:100%; }
|
|||||||
table#change-history tbody th { width:16em; }
|
table#change-history tbody th { width:16em; }
|
||||||
|
|
||||||
/* TABLE SORTING */
|
/* TABLE SORTING */
|
||||||
|
|
||||||
thead th a:link, thead th a:visited { color:#666; display:block; }
|
thead th a:link, thead th a:visited { color:#666; display:block; }
|
||||||
table thead th.sorted { background-position:bottom left !important; }
|
table thead th.sorted { background-position:bottom left !important; }
|
||||||
table thead th.sorted a { padding-right:13px; }
|
table thead th.sorted a { padding-right:13px; }
|
||||||
@ -149,7 +108,6 @@ table thead th.ascending a { background:url(../img/admin/arrow-down.gif) right .
|
|||||||
table thead th.descending a { background:url(../img/admin/arrow-up.gif) right .4em no-repeat; }
|
table thead th.descending a { background:url(../img/admin/arrow-up.gif) right .4em no-repeat; }
|
||||||
|
|
||||||
/* MODULES */
|
/* MODULES */
|
||||||
|
|
||||||
.module { border:1px solid #ccc; margin-bottom:5px; background:white; }
|
.module { border:1px solid #ccc; margin-bottom:5px; background:white; }
|
||||||
.module p, .module ul, .module h3, .module h4, .module dl, .module pre { padding-left:10px; padding-right:10px; }
|
.module p, .module ul, .module h3, .module h4, .module dl, .module pre { padding-left:10px; padding-right:10px; }
|
||||||
.module blockquote { margin-left:12px; }
|
.module blockquote { margin-left:12px; }
|
||||||
@ -173,7 +131,6 @@ textarea { vertical-align:top !important; }
|
|||||||
input[type=checkbox], input[type=radio] { border:none; }
|
input[type=checkbox], input[type=radio] { border:none; }
|
||||||
|
|
||||||
/* FORM BUTTONS */
|
/* FORM BUTTONS */
|
||||||
|
|
||||||
input[type=submit], input[type=button], .submit-row input { background:white url(../img/admin/nav-bg.gif) bottom repeat-x; padding:3px; }
|
input[type=submit], input[type=button], .submit-row input { background:white url(../img/admin/nav-bg.gif) bottom repeat-x; padding:3px; }
|
||||||
input[type=submit]:active, input[type=button]:active { background-image:url(../img/admin/nav-bg-reverse.gif); background-position:top; }
|
input[type=submit]:active, input[type=button]:active { background-image:url(../img/admin/nav-bg-reverse.gif); background-position:top; }
|
||||||
input[type=submit].default, .submit-row input.default { border:2px solid #5b80b2; background:#7CA0C7 url(../img/admin/default-bg.gif) bottom repeat-x; font-weight:bold; color:white; }
|
input[type=submit].default, .submit-row input.default { border:2px solid #5b80b2; background:#7CA0C7 url(../img/admin/default-bg.gif) bottom repeat-x; font-weight:bold; color:white; }
|
||||||
@ -183,7 +140,6 @@ input[type=submit].default:active { background-image:url(../img/admin/default-bg
|
|||||||
.submit-row .float-left { padding-top:.1em; }
|
.submit-row .float-left { padding-top:.1em; }
|
||||||
|
|
||||||
/* FORM ROWS */
|
/* FORM ROWS */
|
||||||
|
|
||||||
.form-row { clear:both; padding:8px 12px; font-size:11px; }
|
.form-row { clear:both; padding:8px 12px; font-size:11px; }
|
||||||
html>body .form-row { border-bottom:1px solid #eee; }
|
html>body .form-row { border-bottom:1px solid #eee; }
|
||||||
.form-row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
.form-row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||||
@ -191,21 +147,18 @@ html>body .form-row { border-bottom:1px solid #eee; }
|
|||||||
form .form-row p { padding-left:0; font-size:11px; }
|
form .form-row p { padding-left:0; font-size:11px; }
|
||||||
|
|
||||||
/* FORM LABELS */
|
/* FORM LABELS */
|
||||||
|
|
||||||
form h4 { margin:0 !important; padding:0 !important; border:none !important; }
|
form h4 { margin:0 !important; padding:0 !important; border:none !important; }
|
||||||
label { font-weight:normal !important; color:#666; font-size:12px; }
|
label { font-weight:normal !important; color:#666; font-size:12px; }
|
||||||
label.inline { margin-left:20px; }
|
label.inline { margin-left:20px; }
|
||||||
.required label, label.required { font-weight:bold !important; color:#333 !important; }
|
.required label, label.required { font-weight:bold !important; color:#333 !important; }
|
||||||
|
|
||||||
/* RADIO BUTTONS */
|
/* RADIO BUTTONS */
|
||||||
|
|
||||||
form ul.radiolist li { list-style-type:none; }
|
form ul.radiolist li { list-style-type:none; }
|
||||||
form ul.radiolist label { float:none; display:inline; }
|
form ul.radiolist label { float:none; display:inline; }
|
||||||
form ul.inline { margin-left:0; padding:0; }
|
form ul.inline { margin-left:0; padding:0; }
|
||||||
form ul.inline li { float:left; padding-right:7px; }
|
form ul.inline li { float:left; padding-right:7px; }
|
||||||
|
|
||||||
/* ALIGNED FIELDSETS */
|
/* ALIGNED FIELDSETS */
|
||||||
|
|
||||||
.aligned label { display:block; padding:0 1em 3px 0; float:left; text-align:left; width:8em; }
|
.aligned label { display:block; padding:0 1em 3px 0; float:left; text-align:left; width:8em; }
|
||||||
.aligned label.inline { display:inline; float:none; }
|
.aligned label.inline { display:inline; float:none; }
|
||||||
.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { width:350px; }
|
.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { width:350px; }
|
||||||
@ -217,14 +170,12 @@ form .aligned p.help { padding-left:38px; }
|
|||||||
.checkbox-row p.help { margin-left:0; padding-left:0 !important; }
|
.checkbox-row p.help { margin-left:0; padding-left:0 !important; }
|
||||||
|
|
||||||
/* WIDE FIELDSETS */
|
/* WIDE FIELDSETS */
|
||||||
|
|
||||||
.wide label { width:15em !important; }
|
.wide label { width:15em !important; }
|
||||||
form .wide p { margin-left:15em; }
|
form .wide p { margin-left:15em; }
|
||||||
form .wide p.help { padding-left:38px; }
|
form .wide p.help { padding-left:38px; }
|
||||||
.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { width:450px; }
|
.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { width:450px; }
|
||||||
|
|
||||||
/* COLLAPSED FIELDSETS */
|
/* COLLAPSED FIELDSETS */
|
||||||
|
|
||||||
fieldset.collapsed * { display:none; }
|
fieldset.collapsed * { display:none; }
|
||||||
fieldset.collapsed h2, fieldset.collapsed { display:block !important; }
|
fieldset.collapsed h2, fieldset.collapsed { display:block !important; }
|
||||||
fieldset.collapsed .collapse-toggle { display: inline !important; }
|
fieldset.collapsed .collapse-toggle { display: inline !important; }
|
||||||
@ -233,7 +184,6 @@ fieldset.collapse h2 a.collapse-toggle:hover { text-decoration:underline; }
|
|||||||
.hidden { display:none; }
|
.hidden { display:none; }
|
||||||
|
|
||||||
/* MESSAGES & ERRORS */
|
/* MESSAGES & ERRORS */
|
||||||
|
|
||||||
ul.messagelist { padding:0 0 5px 0; margin:0; }
|
ul.messagelist { padding:0 0 5px 0; margin:0; }
|
||||||
ul.messagelist li { font-size:12px; display:block; padding:4px 5px 4px 25px; margin:0 0 3px 0; border-bottom:1px solid #ddd; color:#666; background:#ffc url(../img/admin/icon_success.gif) 5px .3em no-repeat; }
|
ul.messagelist li { font-size:12px; display:block; padding:4px 5px 4px 25px; margin:0 0 3px 0; border-bottom:1px solid #ddd; color:#666; background:#ffc url(../img/admin/icon_success.gif) 5px .3em no-repeat; }
|
||||||
.errornote { font-size:12px !important; display:block; padding:4px 5px 4px 25px; margin:0 0 3px 0; border:1px solid red; color:red;background:#ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat; }
|
.errornote { font-size:12px !important; display:block; padding:4px 5px 4px 25px; margin:0 0 3px 0; border:1px solid red; color:red;background:#ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat; }
|
||||||
@ -245,7 +195,6 @@ td ul.errorlist li { margin:0 !important; }
|
|||||||
.error input, .error select { border:1px solid red; }
|
.error input, .error select { border:1px solid red; }
|
||||||
|
|
||||||
/* ACTION ICONS */
|
/* ACTION ICONS */
|
||||||
|
|
||||||
.addlink { padding-left:12px; background:url(../img/admin/icon_addlink.gif) 0 .2em no-repeat; }
|
.addlink { padding-left:12px; background:url(../img/admin/icon_addlink.gif) 0 .2em no-repeat; }
|
||||||
.changelink { padding-left:12px; background:url(../img/admin/icon_changelink.gif) 0 .2em no-repeat; }
|
.changelink { padding-left:12px; background:url(../img/admin/icon_changelink.gif) 0 .2em no-repeat; }
|
||||||
.deletelink { padding-left:12px; background:url(../img/admin/icon_deletelink.gif) 0 50% no-repeat; }
|
.deletelink { padding-left:12px; background:url(../img/admin/icon_deletelink.gif) 0 50% no-repeat; }
|
||||||
@ -253,7 +202,6 @@ a.deletelink:link, a.deletelink:visited { color:#CC3434; }
|
|||||||
a.deletelink:hover { color:#993333; }
|
a.deletelink:hover { color:#993333; }
|
||||||
|
|
||||||
/* OBJECT TOOLS */
|
/* OBJECT TOOLS */
|
||||||
|
|
||||||
.object-tools { font-size:10px; font-weight:bold; font-family:Arial,Helvetica,sans-serif; padding-left:0; margin-bottom:5px; float:right; position:relative; margin-top:-2.4em; margin-bottom:-2em; }
|
.object-tools { font-size:10px; font-weight:bold; font-family:Arial,Helvetica,sans-serif; padding-left:0; margin-bottom:5px; float:right; position:relative; margin-top:-2.4em; margin-bottom:-2em; }
|
||||||
.form-row .object-tools { margin-top:0; margin-bottom:0; }
|
.form-row .object-tools { margin-top:0; margin-bottom:0; }
|
||||||
.object-tools li { display:block; float:left; background:url(../img/admin/tool-left.gif) 0 0 no-repeat; padding:0 0 0 8px; margin-left:2px; height:16px; }
|
.object-tools li { display:block; float:left; background:url(../img/admin/tool-left.gif) 0 0 no-repeat; padding:0 0 0 8px; margin-left:2px; height:16px; }
|
||||||
@ -266,17 +214,14 @@ a.deletelink:hover { color:#993333; }
|
|||||||
.object-tools a.addlink:hover { background:#5b80b2 url(../img/admin/tooltag-add_over.gif) top right no-repeat; }
|
.object-tools a.addlink:hover { background:#5b80b2 url(../img/admin/tooltag-add_over.gif) top right no-repeat; }
|
||||||
|
|
||||||
/* INLINE CONTROLS */
|
/* INLINE CONTROLS */
|
||||||
|
|
||||||
#inline-controls { font-weight:bold; font-size:12px; }
|
#inline-controls { font-weight:bold; font-size:12px; }
|
||||||
#inline-specific-controls { margin-left:6px; padding:0 8px; border-left:6px solid #ccc; }
|
#inline-specific-controls { margin-left:6px; padding:0 8px; border-left:6px solid #ccc; }
|
||||||
|
|
||||||
/* BREADCRUMBS */
|
/* BREADCRUMBS */
|
||||||
|
|
||||||
p.breadcrumbs { font-size:11px; color:#ccc;text-align:left; } /* old breadcrumbs style */
|
p.breadcrumbs { font-size:11px; color:#ccc;text-align:left; } /* old breadcrumbs style */
|
||||||
div.breadcrumbs { background:white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x; padding:2px 8px 3px 8px; font-size:11px; color:#999; border-top:1px solid white; border-bottom:1px solid #ccc; text-align:left; }
|
div.breadcrumbs { background:white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x; padding:2px 8px 3px 8px; font-size:11px; color:#999; border-top:1px solid white; border-bottom:1px solid #ccc; text-align:left; }
|
||||||
|
|
||||||
/* SELECTOR (FILTER INTERFACE) */
|
/* SELECTOR (FILTER INTERFACE) */
|
||||||
|
|
||||||
.selector { width:580px; float:left; }
|
.selector { width:580px; float:left; }
|
||||||
.selector select { width:270px; height:170px; }
|
.selector select { width:270px; height:170px; }
|
||||||
.selector-available, .selector-chosen { float:left; width:270px; text-align:center; margin-bottom:5px; }
|
.selector-available, .selector-chosen { float:left; width:270px; text-align:center; margin-bottom:5px; }
|
||||||
@ -297,7 +242,6 @@ a.selector-chooseall { width:7em; background:url(../img/admin/selector-addall.gi
|
|||||||
a.selector-clearall { background:url(../img/admin/selector-removeall.gif) left center no-repeat; }
|
a.selector-clearall { background:url(../img/admin/selector-removeall.gif) left center no-repeat; }
|
||||||
|
|
||||||
/* Stacked selectors for long items */
|
/* Stacked selectors for long items */
|
||||||
|
|
||||||
.stacked { float:left; width:500px; }
|
.stacked { float:left; width:500px; }
|
||||||
.stacked select { width:480px; height:100px; }
|
.stacked select { width:480px; height:100px; }
|
||||||
.stacked .selector-available, .stacked .selector-chosen { width:480px; }
|
.stacked .selector-available, .stacked .selector-chosen { width:480px; }
|
||||||
@ -310,20 +254,17 @@ a.selector-clearall { background:url(../img/admin/selector-removeall.gif) left c
|
|||||||
.stacked .selector-remove { background-image:url(../img/admin/selector_stacked-remove.gif); }
|
.stacked .selector-remove { background-image:url(../img/admin/selector_stacked-remove.gif); }
|
||||||
|
|
||||||
/* DATE AND TIME */
|
/* DATE AND TIME */
|
||||||
|
|
||||||
p.datetime { line-height:20px; margin:0; padding:0; color:#666; font-size:11px; font-weight:bold; }
|
p.datetime { line-height:20px; margin:0; padding:0; color:#666; font-size:11px; font-weight:bold; }
|
||||||
.datetime span { font-size:11px; font-weight:normal; white-space:nowrap; }
|
.datetime span { font-size:11px; font-weight:normal; white-space:nowrap; }
|
||||||
.vDateField { margin-left:4px; }
|
.vDateField { margin-left:4px; }
|
||||||
table p.datetime { font-size:10px; margin-left:0; padding-left:0; }
|
table p.datetime { font-size:10px; margin-left:0; padding-left:0; }
|
||||||
|
|
||||||
/* FILE UPLOADS */
|
/* FILE UPLOADS */
|
||||||
|
|
||||||
p.file-upload { line-height:20px; margin:0; padding:0; color:#666; font-size:11px; font-weight:bold; }
|
p.file-upload { line-height:20px; margin:0; padding:0; color:#666; font-size:11px; font-weight:bold; }
|
||||||
.file-upload a { font-weight:normal; }
|
.file-upload a { font-weight:normal; }
|
||||||
.file-upload .deletelink { margin-left:5px; }
|
.file-upload .deletelink { margin-left:5px; }
|
||||||
|
|
||||||
/* CALENDARS & CLOCKS */
|
/* CALENDARS & CLOCKS */
|
||||||
|
|
||||||
.calendarbox, .clockbox { margin:5px auto; width: 10em; text-align: center; background:white; position:relative; }
|
.calendarbox, .clockbox { margin:5px auto; width: 10em; text-align: center; background:white; position:relative; }
|
||||||
.clockbox { width:6em; }
|
.clockbox { width:6em; }
|
||||||
.calendar { margin:0; padding: 0; }
|
.calendar { margin:0; padding: 0; }
|
||||||
@ -350,14 +291,12 @@ ul.timelist, .timelist li { list-style-type:none; margin:0; padding:0; }
|
|||||||
.timelist a { padding:2px; }
|
.timelist a { padding:2px; }
|
||||||
|
|
||||||
/* ORDERING WIDGET */
|
/* ORDERING WIDGET */
|
||||||
|
|
||||||
ul#orderthese { padding:0; margin:0; list-style-type:none; }
|
ul#orderthese { padding:0; margin:0; list-style-type:none; }
|
||||||
ul#orderthese li { list-style-type:none; display:block; padding:0; margin:6px 0; width:214px; background:#f6f6f6; white-space:nowrap; overflow:hidden; }
|
ul#orderthese li { list-style-type:none; display:block; padding:0; margin:6px 0; width:214px; background:#f6f6f6; white-space:nowrap; overflow:hidden; }
|
||||||
ul#orderthese li span { display:block; border:1px solid #e7e7e7; background:transparent url(../img/admin/nav-bg-grabber.gif) top left repeat-y; font-size:10px !important; padding:4px 6px 4px 12px; }
|
ul#orderthese li span { display:block; border:1px solid #e7e7e7; background:transparent url(../img/admin/nav-bg-grabber.gif) top left repeat-y; font-size:10px !important; padding:4px 6px 4px 12px; }
|
||||||
ul#orderthese span:hover { background-color:#efefef; }
|
ul#orderthese span:hover { background-color:#efefef; }
|
||||||
|
|
||||||
/* PAGINATOR */
|
/* PAGINATOR */
|
||||||
|
|
||||||
.paginator { font-size:11px; padding-top:10px; padding-bottom:10px; line-height:22px; margin:0; border-top:1px solid #ddd; }
|
.paginator { font-size:11px; padding-top:10px; padding-bottom:10px; line-height:22px; margin:0; border-top:1px solid #ddd; }
|
||||||
.paginator a:link, .paginator a:visited { padding:2px 6px; border:solid 1px #ccc; background:white; text-decoration:none; }
|
.paginator a:link, .paginator a:visited { padding:2px 6px; border:solid 1px #ccc; background:white; text-decoration:none; }
|
||||||
.paginator a.showall { padding:0 !important; border:none !important; }
|
.paginator a.showall { padding:0 !important; border:none !important; }
|
||||||
@ -367,7 +306,6 @@ ul#orderthese span:hover { background-color:#efefef; }
|
|||||||
.paginator a:hover { color:white; background:#5b80b2; border-color:#036; }
|
.paginator a:hover { color:white; background:#5b80b2; border-color:#036; }
|
||||||
|
|
||||||
/* TEXT STYLES & MODIFIERS */
|
/* TEXT STYLES & MODIFIERS */
|
||||||
|
|
||||||
.small { font-size:11px; }
|
.small { font-size:11px; }
|
||||||
.tiny { font-size:10px; }
|
.tiny { font-size:10px; }
|
||||||
p.tiny { margin-top:-2px; }
|
p.tiny { margin-top:-2px; }
|
||||||
@ -386,7 +324,6 @@ p img, h1 img, h2 img, h3 img, h4 img, td img { vertical-align:middle; }
|
|||||||
.nowrap { white-space:nowrap; }
|
.nowrap { white-space:nowrap; }
|
||||||
|
|
||||||
/* CUSTOM FORM FIELDS */
|
/* CUSTOM FORM FIELDS */
|
||||||
|
|
||||||
.vSelectMultipleField { vertical-align:top !important; }
|
.vSelectMultipleField { vertical-align:top !important; }
|
||||||
.vCheckboxField { border:none; }
|
.vCheckboxField { border:none; }
|
||||||
.vDateField, .vTimeField { margin-right:2px; }
|
.vDateField, .vTimeField { margin-right:2px; }
|
||||||
|
@ -2,24 +2,24 @@ from django.conf.urls.defaults import *
|
|||||||
from django.conf.settings import INSTALLED_APPS
|
from django.conf.settings import INSTALLED_APPS
|
||||||
|
|
||||||
urlpatterns = (
|
urlpatterns = (
|
||||||
('^$', 'django.views.admin.main.index'),
|
('^$', 'django.contrib.admin.views.main.index'),
|
||||||
('^logout/$', 'django.views.auth.login.logout'),
|
('^logout/$', 'django.views.auth.login.logout'),
|
||||||
('^password_change/$', 'django.views.registration.passwords.password_change'),
|
('^password_change/$', 'django.views.registration.passwords.password_change'),
|
||||||
('^password_change/done/$', 'django.views.registration.passwords.password_change_done'),
|
('^password_change/done/$', 'django.views.registration.passwords.password_change_done'),
|
||||||
('^template_validator/$', 'django.views.admin.template.template_validator'),
|
('^template_validator/$', 'django.contrib.admin.views.template.template_validator'),
|
||||||
|
|
||||||
# Documentation
|
# Documentation
|
||||||
('^doc/$', 'django.views.admin.doc.doc_index'),
|
('^doc/$', 'django.contrib.admin.views.doc.doc_index'),
|
||||||
('^doc/bookmarklets/$', 'django.views.admin.doc.bookmarklets'),
|
('^doc/bookmarklets/$', 'django.contrib.admin.views.doc.bookmarklets'),
|
||||||
('^doc/tags/$', 'django.views.admin.doc.template_tag_index'),
|
('^doc/tags/$', 'django.contrib.admin.views.doc.template_tag_index'),
|
||||||
('^doc/filters/$', 'django.views.admin.doc.template_filter_index'),
|
('^doc/filters/$', 'django.contrib.admin.views.doc.template_filter_index'),
|
||||||
('^doc/views/$', 'django.views.admin.doc.view_index'),
|
('^doc/views/$', 'django.contrib.admin.views.doc.view_index'),
|
||||||
('^doc/views/jump/$', 'django.views.admin.doc.jump_to_view'),
|
('^doc/views/jump/$', 'django.contrib.admin.views.doc.jump_to_view'),
|
||||||
('^doc/views/(?P<view>[^/]+)/$', 'django.views.admin.doc.view_detail'),
|
('^doc/views/(?P<view>[^/]+)/$', 'django.contrib.admin.views.doc.view_detail'),
|
||||||
('^doc/models/$', 'django.views.admin.doc.model_index'),
|
('^doc/models/$', 'django.contrib.admin.views.doc.model_index'),
|
||||||
('^doc/models/(?P<model>[^/]+)/$', 'django.views.admin.doc.model_detail'),
|
('^doc/models/(?P<model>[^/]+)/$', 'django.contrib.admin.views.doc.model_detail'),
|
||||||
# ('^doc/templates/$', 'django.views.admin.doc.template_index'),
|
# ('^doc/templates/$', 'django.views.admin.doc.template_index'),
|
||||||
('^doc/templates/(?P<template>.*)/$', 'django.views.admin.doc.template_detail'),
|
('^doc/templates/(?P<template>.*)/$', 'django.contrib.admin.views.doc.template_detail'),
|
||||||
)
|
)
|
||||||
|
|
||||||
if 'ellington.events' in INSTALLED_APPS:
|
if 'ellington.events' in INSTALLED_APPS:
|
||||||
@ -48,11 +48,10 @@ if 'ellington.media' in INSTALLED_APPS:
|
|||||||
|
|
||||||
urlpatterns += (
|
urlpatterns += (
|
||||||
# Metasystem admin pages
|
# Metasystem admin pages
|
||||||
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/$', 'django.views.admin.main.change_list'),
|
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/$', 'django.contrib.admin.views.main.change_list'),
|
||||||
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/add/$', 'django.views.admin.main.add_stage'),
|
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/add/$', 'django.contrib.admin.views.main.add_stage'),
|
||||||
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/jsvalidation/$', 'django.views.admin.jsvalidation.jsvalidation'),
|
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/(?P<object_id>.+)/history/$', 'django.contrib.admin.views.main.history'),
|
||||||
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/(?P<object_id>.+)/history/$', 'django.views.admin.main.history'),
|
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/(?P<object_id>.+)/delete/$', 'django.contrib.admin.views.main.delete_stage'),
|
||||||
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/(?P<object_id>.+)/delete/$', 'django.views.admin.main.delete_stage'),
|
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/(?P<object_id>.+)/$', 'django.contrib.admin.views.main.change_stage'),
|
||||||
('^(?P<app_label>[^/]+)/(?P<module_name>[^/]+)/(?P<object_id>.+)/$', 'django.views.admin.main.change_stage'),
|
|
||||||
)
|
)
|
||||||
urlpatterns = patterns('', *urlpatterns)
|
urlpatterns = patterns('', *urlpatterns)
|
||||||
|
0
django/contrib/admin/urls/__init__.py
Normal file
0
django/contrib/admin/urls/__init__.py
Normal file
0
django/contrib/admin/views/__init__.py
Normal file
0
django/contrib/admin/views/__init__.py
Normal file
100
django/contrib/admin/views/decorators.py
Normal file
100
django/contrib/admin/views/decorators.py
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
from django.core.extensions import DjangoContext, render_to_response
|
||||||
|
from django.conf.settings import SECRET_KEY
|
||||||
|
from django.models.auth import users
|
||||||
|
from django.utils import httpwrappers
|
||||||
|
import base64, md5
|
||||||
|
import cPickle as pickle
|
||||||
|
|
||||||
|
ERROR_MESSAGE = "Please enter a correct username and password. Note that both fields are case-sensitive."
|
||||||
|
LOGIN_FORM_KEY = 'this_is_the_login_form'
|
||||||
|
|
||||||
|
def _display_login_form(request, error_message=''):
|
||||||
|
request.session.set_test_cookie()
|
||||||
|
if request.POST and request.POST.has_key('post_data'):
|
||||||
|
# User has failed login BUT has previously saved post data.
|
||||||
|
post_data = request.POST['post_data']
|
||||||
|
elif request.POST:
|
||||||
|
# User's session must have expired; save their post data.
|
||||||
|
post_data = _encode_post_data(request.POST)
|
||||||
|
else:
|
||||||
|
post_data = _encode_post_data({})
|
||||||
|
return render_to_response('admin/login', {
|
||||||
|
'title': 'Log in',
|
||||||
|
'app_path': request.path,
|
||||||
|
'post_data': post_data,
|
||||||
|
'error_message': error_message
|
||||||
|
}, context_instance=DjangoContext(request))
|
||||||
|
|
||||||
|
def _encode_post_data(post_data):
|
||||||
|
pickled = pickle.dumps(post_data)
|
||||||
|
pickled_md5 = md5.new(pickled + SECRET_KEY).hexdigest()
|
||||||
|
return base64.encodestring(pickled + pickled_md5)
|
||||||
|
|
||||||
|
def _decode_post_data(encoded_data):
|
||||||
|
encoded_data = base64.decodestring(encoded_data)
|
||||||
|
pickled, tamper_check = encoded_data[:-32], encoded_data[-32:]
|
||||||
|
if md5.new(pickled + SECRET_KEY).hexdigest() != tamper_check:
|
||||||
|
from django.core.exceptions import SuspiciousOperation
|
||||||
|
raise SuspiciousOperation, "User may have tampered with session cookie."
|
||||||
|
return pickle.loads(pickled)
|
||||||
|
|
||||||
|
def staff_member_required(view_func):
|
||||||
|
"""
|
||||||
|
Decorator for views that checks that the user is logged in and is a staff
|
||||||
|
member, displaying the login page if necessary.
|
||||||
|
"""
|
||||||
|
def _checklogin(request, *args, **kwargs):
|
||||||
|
if not request.user.is_anonymous() and request.user.is_staff:
|
||||||
|
# The user is valid. Continue to the admin page.
|
||||||
|
return view_func(request, *args, **kwargs)
|
||||||
|
|
||||||
|
assert hasattr(request, 'session'), "The Django admin requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.middleware.sessions.SessionMiddleware'."
|
||||||
|
|
||||||
|
# If this isn't already the login page, display it.
|
||||||
|
if not request.POST.has_key(LOGIN_FORM_KEY):
|
||||||
|
if request.POST:
|
||||||
|
message = "Please log in again, because your session has expired. "\
|
||||||
|
"Don't worry: Your submission has been saved."
|
||||||
|
else:
|
||||||
|
message = ""
|
||||||
|
return _display_login_form(request, message)
|
||||||
|
|
||||||
|
# Check that the user accepts cookies.
|
||||||
|
if not request.session.test_cookie_worked():
|
||||||
|
message = "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
|
||||||
|
return _display_login_form(request, message)
|
||||||
|
|
||||||
|
# Check the password.
|
||||||
|
username = request.POST.get('username', '')
|
||||||
|
try:
|
||||||
|
user = users.get_object(username__exact=username, is_staff__exact=True)
|
||||||
|
except users.UserDoesNotExist:
|
||||||
|
message = ERROR_MESSAGE
|
||||||
|
if '@' in username:
|
||||||
|
# Mistakenly entered e-mail address instead of username? Look it up.
|
||||||
|
try:
|
||||||
|
user = users.get_object(email__exact=username)
|
||||||
|
except users.UserDoesNotExist:
|
||||||
|
message = "Usernames cannot contain the '@' character."
|
||||||
|
else:
|
||||||
|
message = "Your e-mail address is not your username. Try '%s' instead." % user.username
|
||||||
|
return _display_login_form(request, message)
|
||||||
|
|
||||||
|
# The user data is correct; log in the user in and continue.
|
||||||
|
else:
|
||||||
|
if user.check_password(request.POST.get('password', '')):
|
||||||
|
request.session[users.SESSION_KEY] = user.id
|
||||||
|
if request.POST.has_key('post_data'):
|
||||||
|
post_data = _decode_post_data(request.POST['post_data'])
|
||||||
|
if post_data and not post_data.has_key(LOGIN_FORM_KEY):
|
||||||
|
# overwrite request.POST with the saved post_data, and continue
|
||||||
|
request.POST = post_data
|
||||||
|
request.user = user
|
||||||
|
return view_func(request, *args, **kwargs)
|
||||||
|
else:
|
||||||
|
request.session.delete_test_cookie()
|
||||||
|
return httpwrappers.HttpResponseRedirect(request.path)
|
||||||
|
else:
|
||||||
|
return _display_login_form(request, ERROR_MESSAGE)
|
||||||
|
|
||||||
|
return _checklogin
|
@ -1,11 +1,12 @@
|
|||||||
from django.core import meta
|
from django.core import meta
|
||||||
from django import templatetags
|
from django import templatetags
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.admin.views.decorators import staff_member_required
|
||||||
from django.models.core import sites
|
from django.models.core import sites
|
||||||
from django.core.extensions import DjangoContext, render_to_response
|
from django.core.extensions import DjangoContext, render_to_response
|
||||||
from django.core.exceptions import Http404, ViewDoesNotExist
|
from django.core.exceptions import Http404, ViewDoesNotExist
|
||||||
from django.core import template, template_loader, urlresolvers
|
from django.core import template, urlresolvers
|
||||||
from django.core.template import defaulttags, defaultfilters
|
from django.core.template import defaulttags, defaultfilters, loader
|
||||||
try:
|
try:
|
||||||
from django.parts.admin import doc
|
from django.parts.admin import doc
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -19,11 +20,13 @@ def doc_index(request):
|
|||||||
if not doc:
|
if not doc:
|
||||||
return missing_docutils_page(request)
|
return missing_docutils_page(request)
|
||||||
return render_to_response('doc/index', context_instance=DjangoContext(request))
|
return render_to_response('doc/index', context_instance=DjangoContext(request))
|
||||||
|
doc_index = staff_member_required(doc_index)
|
||||||
|
|
||||||
def bookmarklets(request):
|
def bookmarklets(request):
|
||||||
return render_to_response('doc/bookmarklets', {
|
return render_to_response('doc/bookmarklets', {
|
||||||
'admin_url' : "%s://%s" % (os.environ.get('HTTPS') == 'on' and 'https' or 'http', request.META['HTTP_HOST']),
|
'admin_url' : "%s://%s" % (os.environ.get('HTTPS') == 'on' and 'https' or 'http', request.META['HTTP_HOST']),
|
||||||
}, context_instance=DjangoContext(request))
|
}, context_instance=DjangoContext(request))
|
||||||
|
bookmarklets = staff_member_required(bookmarklets)
|
||||||
|
|
||||||
def template_tag_index(request):
|
def template_tag_index(request):
|
||||||
import sys
|
import sys
|
||||||
@ -61,6 +64,7 @@ def template_tag_index(request):
|
|||||||
template.registered_tags, template.registered_filters = saved_tagset
|
template.registered_tags, template.registered_filters = saved_tagset
|
||||||
|
|
||||||
return render_to_response('doc/template_tag_index', {'tags': tags}, context_instance=DjangoContext(request))
|
return render_to_response('doc/template_tag_index', {'tags': tags}, context_instance=DjangoContext(request))
|
||||||
|
template_tag_index = staff_member_required(template_tag_index)
|
||||||
|
|
||||||
def template_filter_index(request):
|
def template_filter_index(request):
|
||||||
if not doc:
|
if not doc:
|
||||||
@ -93,6 +97,7 @@ def template_filter_index(request):
|
|||||||
template.registered_tags, template.registered_filters = saved_tagset
|
template.registered_tags, template.registered_filters = saved_tagset
|
||||||
|
|
||||||
return render_to_response('doc/template_filter_index', {'filters': filters}, context_instance=DjangoContext(request))
|
return render_to_response('doc/template_filter_index', {'filters': filters}, context_instance=DjangoContext(request))
|
||||||
|
template_filter_index = staff_member_required(template_filter_index)
|
||||||
|
|
||||||
def view_index(request):
|
def view_index(request):
|
||||||
if not doc:
|
if not doc:
|
||||||
@ -112,6 +117,7 @@ def view_index(request):
|
|||||||
'url' : simplify_regex(regex),
|
'url' : simplify_regex(regex),
|
||||||
})
|
})
|
||||||
return render_to_response('doc/view_index', {'views': views}, context_instance=DjangoContext(request))
|
return render_to_response('doc/view_index', {'views': views}, context_instance=DjangoContext(request))
|
||||||
|
view_index = staff_member_required(view_index)
|
||||||
|
|
||||||
def view_detail(request, view):
|
def view_detail(request, view):
|
||||||
if not doc:
|
if not doc:
|
||||||
@ -135,6 +141,7 @@ def view_detail(request, view):
|
|||||||
'body': body,
|
'body': body,
|
||||||
'meta': metadata,
|
'meta': metadata,
|
||||||
}, context_instance=DjangoContext(request))
|
}, context_instance=DjangoContext(request))
|
||||||
|
view_detail = staff_member_required(view_detail)
|
||||||
|
|
||||||
def model_index(request):
|
def model_index(request):
|
||||||
if not doc:
|
if not doc:
|
||||||
@ -150,6 +157,7 @@ def model_index(request):
|
|||||||
'class' : opts.module_name,
|
'class' : opts.module_name,
|
||||||
})
|
})
|
||||||
return render_to_response('doc/model_index', {'models': models}, context_instance=DjangoContext(request))
|
return render_to_response('doc/model_index', {'models': models}, context_instance=DjangoContext(request))
|
||||||
|
model_index = staff_member_required(model_index)
|
||||||
|
|
||||||
def model_detail(request, model):
|
def model_detail(request, model):
|
||||||
if not doc:
|
if not doc:
|
||||||
@ -191,6 +199,7 @@ def model_detail(request, model):
|
|||||||
'summary': "Fields on %s objects" % opts.verbose_name,
|
'summary': "Fields on %s objects" % opts.verbose_name,
|
||||||
'fields': fields,
|
'fields': fields,
|
||||||
}, context_instance=DjangoContext(request))
|
}, context_instance=DjangoContext(request))
|
||||||
|
model_detail = staff_member_required(model_detail)
|
||||||
|
|
||||||
def template_detail(request, template):
|
def template_detail(request, template):
|
||||||
templates = []
|
templates = []
|
||||||
@ -210,6 +219,7 @@ def template_detail(request, template):
|
|||||||
'name': template,
|
'name': template,
|
||||||
'templates': templates,
|
'templates': templates,
|
||||||
}, context_instance=DjangoContext(request))
|
}, context_instance=DjangoContext(request))
|
||||||
|
template_detail = staff_member_required(template_detail)
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# Helper functions #
|
# Helper functions #
|
||||||
@ -223,7 +233,7 @@ def load_all_installed_template_libraries():
|
|||||||
# Clear out and reload default tags
|
# Clear out and reload default tags
|
||||||
template.registered_tags.clear()
|
template.registered_tags.clear()
|
||||||
reload(defaulttags)
|
reload(defaulttags)
|
||||||
reload(template_loader) # template_loader defines the block/extends tags
|
reload(loader) # loader defines the block/extends tags
|
||||||
|
|
||||||
# Load any template tag libraries from installed apps
|
# Load any template tag libraries from installed apps
|
||||||
for e in templatetags.__path__:
|
for e in templatetags.__path__:
|
@ -1,6 +1,8 @@
|
|||||||
# Generic admin views, with admin templates created dynamically at runtime.
|
# Generic admin views, with admin templates created dynamically at runtime.
|
||||||
|
|
||||||
from django.core import formfields, meta, template_loader
|
from django.contrib.admin.views.decorators import staff_member_required
|
||||||
|
from django.core import formfields, meta
|
||||||
|
from django.core.template import loader
|
||||||
from django.core.exceptions import Http404, ObjectDoesNotExist, PermissionDenied
|
from django.core.exceptions import Http404, ObjectDoesNotExist, PermissionDenied
|
||||||
from django.core.extensions import DjangoContext as Context
|
from django.core.extensions import DjangoContext as Context
|
||||||
from django.core.extensions import get_object_or_404, render_to_response
|
from django.core.extensions import get_object_or_404, render_to_response
|
||||||
@ -48,6 +50,7 @@ def get_query_string(original_params, new_params={}, remove=[]):
|
|||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
return render_to_response('index', {'title': 'Site administration'}, context_instance=Context(request))
|
return render_to_response('index', {'title': 'Site administration'}, context_instance=Context(request))
|
||||||
|
index = staff_member_required(index)
|
||||||
|
|
||||||
def change_list(request, app_label, module_name):
|
def change_list(request, app_label, module_name):
|
||||||
from django.core import paginator
|
from django.core import paginator
|
||||||
@ -486,12 +489,13 @@ def change_list(request, app_label, module_name):
|
|||||||
|
|
||||||
raw_template.append('</div>\n</div>')
|
raw_template.append('</div>\n</div>')
|
||||||
raw_template.append('{% endblock %}\n')
|
raw_template.append('{% endblock %}\n')
|
||||||
t = template_loader.get_template_from_string(''.join(raw_template))
|
t = loader.get_template_from_string(''.join(raw_template))
|
||||||
c = Context(request, {
|
c = Context(request, {
|
||||||
'title': (is_popup and 'Select %s' % opts.verbose_name or 'Select %s to change' % opts.verbose_name),
|
'title': (is_popup and 'Select %s' % opts.verbose_name or 'Select %s to change' % opts.verbose_name),
|
||||||
'is_popup': is_popup,
|
'is_popup': is_popup,
|
||||||
})
|
})
|
||||||
return HttpResponse(t.render(c))
|
return HttpResponse(t.render(c))
|
||||||
|
change_list = staff_member_required(change_list)
|
||||||
|
|
||||||
def _get_flattened_data(field, val):
|
def _get_flattened_data(field, val):
|
||||||
"""
|
"""
|
||||||
@ -850,8 +854,9 @@ def add_stage(request, app_label, module_name, show_delete=False, form_url='', p
|
|||||||
c['object_id'] = object_id_override
|
c['object_id'] = object_id_override
|
||||||
raw_template = _get_template(opts, app_label, add=True, show_delete=show_delete, form_url=form_url)
|
raw_template = _get_template(opts, app_label, add=True, show_delete=show_delete, form_url=form_url)
|
||||||
# return HttpResponse(raw_template, mimetype='text/plain')
|
# return HttpResponse(raw_template, mimetype='text/plain')
|
||||||
t = template_loader.get_template_from_string(raw_template)
|
t = loader.get_template_from_string(raw_template)
|
||||||
return HttpResponse(t.render(c))
|
return HttpResponse(t.render(c))
|
||||||
|
add_stage = staff_member_required(add_stage)
|
||||||
|
|
||||||
def change_stage(request, app_label, module_name, object_id):
|
def change_stage(request, app_label, module_name, object_id):
|
||||||
mod, opts = _get_mod_opts(app_label, module_name)
|
mod, opts = _get_mod_opts(app_label, module_name)
|
||||||
@ -975,8 +980,9 @@ def change_stage(request, app_label, module_name, object_id):
|
|||||||
})
|
})
|
||||||
raw_template = _get_template(opts, app_label, change=True)
|
raw_template = _get_template(opts, app_label, change=True)
|
||||||
# return HttpResponse(raw_template, mimetype='text/plain')
|
# return HttpResponse(raw_template, mimetype='text/plain')
|
||||||
t = template_loader.get_template_from_string(raw_template)
|
t = loader.get_template_from_string(raw_template)
|
||||||
return HttpResponse(t.render(c))
|
return HttpResponse(t.render(c))
|
||||||
|
change_stage = staff_member_required(change_stage)
|
||||||
|
|
||||||
def _nest_help(obj, depth, val):
|
def _nest_help(obj, depth, val):
|
||||||
current = obj
|
current = obj
|
||||||
@ -1088,6 +1094,7 @@ def delete_stage(request, app_label, module_name, object_id):
|
|||||||
"deleted_objects": deleted_objects,
|
"deleted_objects": deleted_objects,
|
||||||
"perms_lacking": perms_needed,
|
"perms_lacking": perms_needed,
|
||||||
}, context_instance=Context(request))
|
}, context_instance=Context(request))
|
||||||
|
delete_stage = staff_member_required(delete_stage)
|
||||||
|
|
||||||
def history(request, app_label, module_name, object_id):
|
def history(request, app_label, module_name, object_id):
|
||||||
mod, opts = _get_mod_opts(app_label, module_name)
|
mod, opts = _get_mod_opts(app_label, module_name)
|
||||||
@ -1101,3 +1108,4 @@ def history(request, app_label, module_name, object_id):
|
|||||||
'module_name': capfirst(opts.verbose_name_plural),
|
'module_name': capfirst(opts.verbose_name_plural),
|
||||||
'object': obj,
|
'object': obj,
|
||||||
}, context_instance=Context(request))
|
}, context_instance=Context(request))
|
||||||
|
history = staff_member_required(history)
|
@ -1,3 +1,4 @@
|
|||||||
|
from django.contrib.admin.views.decorators import staff_member_required
|
||||||
from django.core import formfields, validators
|
from django.core import formfields, validators
|
||||||
from django.core import template
|
from django.core import template
|
||||||
from django.core.template import loader
|
from django.core.template import loader
|
||||||
@ -26,6 +27,7 @@ def template_validator(request):
|
|||||||
'title': 'Template validator',
|
'title': 'Template validator',
|
||||||
'form': formfields.FormWrapper(manipulator, new_data, errors),
|
'form': formfields.FormWrapper(manipulator, new_data, errors),
|
||||||
}, context_instance=DjangoContext(request))
|
}, context_instance=DjangoContext(request))
|
||||||
|
template_validator = staff_member_required(template_validator)
|
||||||
|
|
||||||
class TemplateValidator(formfields.Manipulator):
|
class TemplateValidator(formfields.Manipulator):
|
||||||
def __init__(self, settings_modules):
|
def __init__(self, settings_modules):
|
@ -399,13 +399,13 @@ Built-in tag reference
|
|||||||
block are output::
|
block are output::
|
||||||
|
|
||||||
{% if athlete_list %}
|
{% if athlete_list %}
|
||||||
Number of athletes: {{ athlete_list|count }}
|
Number of athletes: {{ athlete_list|length }}
|
||||||
{% else %}
|
{% else %}
|
||||||
No athletes.
|
No athletes.
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
In the above, if ``athlete_list`` is not empty, the number of athletes will be
|
In the above, if ``athlete_list`` is not empty, the number of athletes will be
|
||||||
displayed by the ``{{ athlete_list|count }}`` variable.
|
displayed by the ``{{ athlete_list|length }}`` variable.
|
||||||
|
|
||||||
As you can see, the ``if`` tag can take an option ``{% else %}`` clause that
|
As you can see, the ``if`` tag can take an option ``{% else %}`` clause that
|
||||||
will be displayed if the test fails.
|
will be displayed if the test fails.
|
||||||
@ -432,8 +432,8 @@ Built-in tag reference
|
|||||||
|
|
||||||
{% if athlete_list %}
|
{% if athlete_list %}
|
||||||
{% if coach_list %}
|
{% if coach_list %}
|
||||||
Number of athletes: {{ athlete_list|count }}.
|
Number of athletes: {{ athlete_list|length }}.
|
||||||
Number of coaches: {{ coach_list|count }}.
|
Number of coaches: {{ coach_list|length }}.
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user