i n s t a l l v i r t u a l e n v Create virtualenv $ v i r t u a l e n v e n v "Activate" the virtualenv $ s o u r c e e n v / b i n / a c t i v a t e
y C l a s s ( o b j e c t ) : " " " T h i s i s a c o m m e n t a b o u t t h e c l a s s . " " " d e f s o m e _ s t r i n g ( s e l f ) : r e t u r n ' a s t r i n g ' d e f s o m e _ i n t e g e r ( s e l f ) : r e t u r n 1 d e f s o m e _ b o o l e a n ( s e l f ) : r e t u r n F a l s e
d M a t h ( o b j e c t ) : d e f _ _ i n i t _ _ ( s e l f , n u m b e r ) : s e l f . n u m b e r = n u m b e r d e f a d d _ o n e ( s e l f ) : s e l f . n u m b e r = s e l f . n u m b e r + 1 r e t u r n s e l f . n u m b e r d e f m i n u s _ o n e ( s e l f ) : s e l f . n u m b e r = s e l f . n u m b e r - 1 r e t u r n s e l f . n u m b e r
o m p a n y │ ├ ─ ─ _ _ i n i t _ _ . p y │ ├ ─ ─ a p p s │ │ ├ ─ ─ _ _ i n i t _ _ . p y │ │ └ ─ ─ b l o g │ │ ├ ─ ─ _ _ i n i t _ _ . p y │ │ ├ ─ ─ a d m i n . p y │ │ ├ ─ ─ m i g r a t i o n s │ │ ├ ─ ─ m o d e l s . p y │ │ ├ ─ ─ t e s t s . p y │ │ ├ ─ ─ u r l s . p y │ │ └ ─ ─ v i e w s . p y │ ├ ─ ─ s e t t i n g s . p y │ ├ ─ ─ s t a t i c │ ├ ─ ─ t e m p l a t e s │ ├ ─ ─ u r l s . p y │ └ ─ ─ w s g i . p y ├ ─ ─ m a n a g e . p y └ ─ ─ r e q u i r e m e n t s . p i p
o . c o n f i m p o r t s e t t i n g s f r o m d j a n g o . d b i m p o r t m o d e l s f r o m d j a n g o . u t i l s . t i m e z o n e i m p o r t n o w c l a s s P o s t ( m o d e l s . M o d e l ) : " " " B l o g P o s t M o d e l " " " t i t l e = m o d e l s . C h a r F i e l d ( ' t i t l e ' , m a x _ l e n g t h = 1 0 0 ) s l u g = m o d e l s . S l u g F i e l d ( ' s l u g ' , m a x _ l e n g t h = 1 0 0 ) b o d y = m o d e l s . T e x t F i e l d ( ' p o s t b o d y ' , h e l p _ t e x t = " W r i t e y o u r p o s t h e r e . " ) d a t e _ c r e a t e d = m o d e l s . D a t e T i m e F i e l d ( ' d a t e c r e a t e d ' , d e f a u l t = n o w ) p u b l i s h e d = m o d e l s . B o o l e a n F i e l d ( ' p u b l i s h e d ' , d e f a u l t = T r u e ) a u t h o r = m o d e l s . F o r e i g n K e y ( s e t t i n g s . A U T H _ U S E R _ M O D E L , b l a n k = T r u e , n u l l = T r u e )
b l i c . b l o g _ p o s t " C o l u m n | T y p e | M o d i f i e r s - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - i d | i n t e g e r | n o t n u l l d e f a u l t n e x t v a l ( ' b l o g _ p o s t _ i d _ s e q ' : : r e g c l a s s ) t i t l e | c h a r a c t e r v a r y i n g ( 1 0 0 ) | n o t n u l l s l u g | c h a r a c t e r v a r y i n g ( 1 0 0 ) | n o t n u l l b o d y | t e x t | n o t n u l l d a t e _ c r e a t e d | t i m e s t a m p w i t h t i m e z o n e | n o t n u l l p u b l i s h e d | b o o l e a n | n o t n u l l a u t h o r _ i d | i n t e g e r | I n d e x e s : " b l o g _ p o s t _ p k e y " P R I M A R Y K E Y , b t r e e ( i d ) " b l o g _ p o s t _ a u t h o r _ i d " b t r e e ( a u t h o r _ i d ) " b l o g _ p o s t _ s l u g " b t r e e ( s l u g ) " b l o g _ p o s t _ s l u g _ l i k e " b t r e e ( s l u g v a r c h a r _ p a t t e r n _ o p s ) F o r e i g n - k e y c o n s t r a i n t s : " a u t h o r _ i d _ r e f s _ i d _ d a a a 0 e 9 0 " F O R E I G N K E Y ( a u t h o r _ i d ) R E F E R E N C E S a u t h _ u s e r ( i d ) D E F E R R A B L E I N I T I A L L Y D E F E R R E D
o m d j a n g o . c o n f i m p o r t s e t t i n g s f r o m d j a n g o . c o n f . u r l s i m p o r t p a t t e r n s , i n c l u d e , u r l f r o m d j a n g o . c o n f . u r l s . s t a t i c i m p o r t s t a t i c f r o m d j a n g o . c o n t r i b i m p o r t a d m i n a d m i n . a u t o d i s c o v e r ( ) u r l p a t t e r n s = p a t t e r n s ( ' ' , u r l ( r ' ^ ' , i n c l u d e ( ' c o m p a n y . a p p s . b l o g . u r l s ' ) ) , u r l ( r ' ^ a d m i n / ' , i n c l u d e ( a d m i n . s i t e . u r l s ) ) , ) i f s e t t i n g s . D E B U G a n d s e t t i n g s . M E D I A _ R O O T : u r l p a t t e r n s + = s t a t i c ( s e t t i n g s . M E D I A _ U R L , d o c u m e n t _ r o o t = s e t t i n g s . M E D I A _ R O O T )
g o . c o n f . u r l s i m p o r t p a t t e r n s , u r l f r o m c o m p a n y . a p p s . b l o g i m p o r t v i e w s u r l p a t t e r n s = p a t t e r n s ( ' ' , u r l ( r ' ^ $ ' , v i e w s . P o s t L i s t . a s _ v i e w ( ) , n a m e = ' b l o g - l i s t ' ) , u r l ( r ' ^ ( ? P < y e a r > \ d { 4 } ) / ( ? P < m o n t h > \ w { 3 } ) / ( ? P < d a y > \ d { 2 } ) / ( ? P < s l u g > [ - \ w ] + ) / $ ' , v i e w s . P o s t D e t a i l . a s _ v i e w ( ) , n a m e = ' b l o g - d e t a i l ' ) , )
p p s / b l o g / v i e w s . p y f r o m d j a n g o . v i e w s i m p o r t g e n e r i c f r o m c o m p a n y . a p p s . b l o g . m o d e l s i m p o r t P o s t c l a s s P o s t L i s t ( g e n e r i c . L i s t V i e w ) : " " " L i s t o f p o s t s " " " t e m p l a t e _ n a m e = ' b l o g / l i s t . h t m l ' q u e r y s e t = P o s t . o b j e c t s . f i l t e r ( p u b l i s h e d = T r u e ) . s e l e c t _ r e l a t e d ( ' a u t h o r ' ) c o n t e x t _ o b j e c t _ n a m e = ' p o s t s ' c l a s s P o s t D e t a i l ( g e n e r i c . D e t a i l V i e w ) : " " " D e t a i l v i e w . " " " q u e r y s e t = P o s t . o b j e c t s . f i l t e r ( p u b l i s h e d = T r u e ) . s e l e c t _ r e l a t e d ( ' a u t h o r ' ) t e m p l a t e _ n a m e = ' b l o g / d e t a i l . h t m l ' c o n t e x t _ o b j e c t _ n a m e = ' p o s t '
< ! D O C T Y P E h t m l > < h t m l l a n g = " e n " > < h e a d > < t i t l e > H i < / t i t l e > < / h e a d > < b o d y > { % b l o c k c o n t e n t % } { % e n d b l o c k % } < / b o d y > < / h t m l > b l o g / l i s t . h t m l { % e x t e n d s " b a s e . h t m l " % } { % b l o c k c o n t e n t % } < h 1 > H e l l o w o r l d ! < / h 1 > T h i s w i l l b e d r o p p e d i n t o t h e c o n t e n t b l o c k i n t h e b a s e t e m p l a t e { % e n d b l o c k % }
t e n d s " b a s e . h t m l " % } { % b l o c k c o n t e n t % } { % f o r p o s t i n p o s t s % } < h 1 > { { p o s t . t i t l e } } < / h 1 > { % i f p o s t . a u t h o r % } < s m a l l > P o s t e d b y : { { p o s t . a u t h o r } } < / s m a l l > { % e n d i f % } { { p o s t . b o d y | l i n e b r e a k s } } { % e n d f o r % } { % e n d b l o c k % }
o d y | l i n e b r e a k s | u r l i z e } } Could render < p > H e l l o w o r l d ! < a h r e f = " h t t p : / / w w w . g o o g l e . c o m " > w w w . g o o g l e . c o m < / a > < / p >
a m e % } Single tag Tag Pair { % e x t e n d s " b a s e . h t m l " % } { % f o r p o s t i n p o s t s % } { { p o s t . t i t l e } } { % e n d f o r % } https://docs.djangoproject.com/en/dev/ref/templates/builtins/
a p p s / b l o g / t e m p l a t e t a g s / r e c e n t _ p o s t s . p y i m p o r t t t a g f r o m d j a n g o i m p o r t t e m p l a t e f r o m c o m p a n y . a p p s . b l o g . m o d e l s i m p o r t P o s t r e g i s t e r = t e m p l a t e . L i b r a r y ( ) c l a s s G e t R e c e n t P o s t s ( t t a g . h e l p e r s . A s T a g ) : d e f o u t p u t ( s e l f , d a t a ) : r e t u r n P o s t . o b j e c t s . a l l ( ) r e g i s t e r . t a g ( G e t R e c e n t P o s t s )
e n d s " b a s e . h t m l " % } { % l o a d r e c e n t _ p o s t s % } < s e c t i o n > { % c o m m e n t % } A b o u t u s o r r e c e n t w o r k , e t c h e r e { % e n d c o m m e n t % } < / s e c t i o n > < a s i d e c l a s s = " s i d e b a r " > { % g e t _ r e c e n t _ p o s t s a s r e c e n t _ p o s t s % } < h 2 > R e c e n t P o s t s < / h 2 > { # g e t t h r e e m o s t r e c e n t p o s t s # } { % f o r p o s t i n r e c e n t _ p o s t s | s l i c e : " : 3 " % } { { p o s t . t i t l e } } { % e n d f o r % } < / a s i d e >
Worst I've seen is 20k+ queries on a single page Forcing JOINs with s e l e c t _ r e l a t e d ( ) cut it down to 80 queries. Start to get nervous when you're over 50 queries on a single page load.
a n y │ ├ ─ ─ _ _ i n i t _ _ . p y │ ├ ─ ─ a p p s │ ├ ─ ─ s e t t i n g s . p y │ ├ ─ ─ s t a t i c │ ├ ─ ─ t e m p l a t e s │ ├ ─ ─ u r l s . p y │ └ ─ ─ w s g i . p y ├ ─ ─ m a n a g e . p y └ ─ ─ r e q u i r e m e n t s . p i p Directory location is configurable Put everything in "static"
m p r e s s o r % } { % c o m p r e s s j s % } / / P u t y o u r j s f i l e s o r i n l i n e h e r e . { % e n d c o m p r e s s % } Can create a single file with a version number and minified JS. { % l o a d c o m p r e s s o r % } { % c o m p r e s s c s s % } / / P u t y o u r c s s f i l e s o r i n l i n e h e r e . { % e n d c o m p r e s s % }