рдЪреМрдЦрдЯреЗ рдХреЗ рдореБрдЦреНрдп рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрдирдХреА рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИред рдЖрдк рдПрдХ рдЕрдкрд░рд┐рдЪрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдпрд╛ HTML рдпрд╛ url рдпреЛрдЬрдирд╛ рдХрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗ рджреЗрдЦреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЛрдб рднрдВрдбрд╛рд░рдг рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдиреЗ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкрд░реНрдпрд╛рдкреНрдд рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрдм Django рдореЗрдВ MVC рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЕрд░реНрдерд╛рддреН рдореЙрдбрд▓, рдлрд╝реЙрд░реНрдо, рд╡рд┐рдЪрд╛рд░, рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рддрд░реНрдХ рдХрд╛ рд╡рд┐рддрд░рдг рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рдореЗрдВ Django рдкрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЬрди рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдорд┐рд▓рд╛ред рд╣рдордиреЗ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЯреЗрдмрд▓ рдпрд╛ рдЧреНрд░рд╛рдлрд╝ (рд╣рд╛рдИрдЪрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд░реЗрдХрд▓ рдФрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдмрд┐рдирд╛ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рджреВ рдХреЗред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред рдФрд░ рдЕрдм рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣рд┐рд╕реНрд╕реЗ рдХреА рдУрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрди рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЛрд░реНрдЯ рд╕рдВрдХрд▓рдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред
рдпрд╣рд╛рдБ рдХрдИ рдмрд┐рдВрджреБ рд╣реИрдВ:
- рдПрдХ рддрд░рдл, рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рд╣рдорд╛рд░реЗ рд╕рд╛рде рдПрдХ рд╣реА рд╡рд┐рднрд╛рдЧ рдореЗрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЗрдВрдЯреАрд░рд┐рдпрд░ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдЙрдирдХреЗ рдкрд╛рд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреА рдЕрдЪреНрдЫреА рдХрдорд╛рди рд╣реИ, рдереЛрдбрд╝рд╛ рд╕рд╛ рдПрдЪрдЯреАрдПрдордПрд▓ рдФрд░ рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд╛рдпрдерди, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Django рдирд╣реАрдВред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рд╣рдореЗрдВ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╕реНрддрд┐рд╖реНрдХ рдкрд░ рд▓реЛрдб рд╕реЗ рд░рд╛рд╣рдд рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЙрдирдХреЗ рдХрд╛рдо рдХреЛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рднреА рддреНрд░реБрдЯрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗред - рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдореЗрдВ рдХрд╛рдлреА рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд░реВрдк рдореЗрдВ рдХрдИ рд░рд┐рдкреЛрд░реНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреГрд╖реНрда рд╣реИрдВ рдФрд░ рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ (рдареАрдХ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЗ)
рдпрджрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рддрд░реНрдХ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдмрдбрд╝реА рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ "рдХреБрдЫ" рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдкреВрд░реЗ рддрд░реНрдХ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

- Django рдХреЛ рд░рд┐рдмреВрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╕рд╣рдпреЛрдЧ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдерд╛ред рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдЧрд╛, рдФрд░ рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╢рд╛рдпрдж рдХрд┐рд╕реА рднреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд░реНрджрдирд╛рдХ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВред рдЬреЛ рдЗрдВрдЬрди рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред рдкреНрд░рд╛рд░реВрдк рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдФрд░ JSON, рдФрд░ ini, рдФрд░ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░реЗрдВред XML рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдПрдХ рд╢рд╛рдо рдпрд╣ рдореБрдЭ рдкрд░ рдЫрд╛ рдЧрдпрд╛ - рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдмреБрд░рд╛ рд╣реИ? рд╕реЗрдЯрдЕрдк рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ (рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдкрд╣рд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдЙрд╕реЗ рдЬрд╛рджреБрдИ рд▓рдЧреЗрдВрдЧреА):
рджрд░рдЕрд╕рд▓, рдЪрд╛рд░реНрдЯ рдФрд░ рдЯреЗрдмрд▓ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ рдХреЛрдб рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджреЗрдЦрддрд╛редрд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╣рд░ рдмрд╛рд░ рдХрд┐рд╕реА рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рдЪрд▓рддреА рд╣реИред Django рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВрдЧреЗред
рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдлреИрд╕рд▓реЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдХрдИ рдмрд╛рд░ рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛ред рди рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рдерд╛, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рднреА рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдпрдерди рд╣реИрдХ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд░реНрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдпрд╛ рдХрдИ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреНрд░рд╛рдлрд╝ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕реЗ рдореБрджреНрджреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрдВрдЬрди рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдирд╛ (рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛)
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ "рджреБрднрд╛рд╖рд┐рдпрд╛" рдЕрдкрдиреЗ рд╕рд░рд▓рддрдо рд░реВрдк рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
import os from django.template import RequestContext, Template from django.http import HttpResponse, Http404 from settings import PROJECT_ROOT
рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдЪрд░ ctx_dict рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рд╣реЛрдВрдЧреЗред рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЪрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреВрд░реНрдг рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдорд╛рдирдХ RequestContext рдФрд░ рдЙрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рддрд╛рдЬрд╝рд╛ рдмрдирд╛рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
Urls.py рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
(r'^reports/(?P<report_path>.+)$', 'statistics.views.dynamic_page'),
рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╛рд╕рд┐рдВрдЧ
рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рд╢рдмреНрджрдХреЛрд╢ рдкрд╛рд╕ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рдЧреЗрдЯ-рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╕ ctx_dict рдХреЛ рдмрджрд▓ рджреЗрдВ
def dynamic_page(request, report_path): ctx_dict = {'get': request.GET.get} ...
рдЕрдм, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрдпрд╛рдд рдХреЗ, рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдВ рд╣рд░ рдмрд╛рд░ рдЖрдпрд╛рдд рдирдпрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрд░реЛрдз рд╣рд░ рдмрд╛рд░ рдирдпрд╛ рд╣реЛрддрд╛ рд╣реИред
рдЙрд╕реА рд╕рдордп, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХрд╛ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд░реНрдЯ рдХреЛ рдЙрд╕рдХреЗ рдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ html-id рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдирд╛рдо рдХреЛ рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ (рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд▓рд┐рдП)ред рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕реЗ рдЪрд╛рд░реНрдЯ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╢реИрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдЕрдзрд┐рдХ рдХреЛрд╖реЗрд░ рдирд╣реАрдВ рд╣реИ
chart_name = Chart(select, x_col, config, ..., html_id='chart_name')
рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЗрдВрдЬрди рдХреЗ рдпреВрдЬрд░реНрд╕ рдХреЛ рдЕрдкрдиреА рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рддрдирд╛рд╡ рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ ctx_dict рдХреЗ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдЖрд╡рд╢реНрдпрдХ рдЖрдИрдбреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реИред
... execfile(os.path.join(PROJECT_ROOT, 'reports', report_path + '.py'), ctx_dict) for (name, obj) in ctx_dict.items(): if isinstance(obj, (Chart, Table)): obj.html_id = name ...
Ctx_dict рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рд╣реИред рдЪреВрдБрдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА рдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ RequestContext рд╕реЗ рдкрд╛рд░рд┐рдд рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреБрдЫ рд╕рдВрджрд░реНрдн рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреГрд╖реНрда рд╢реАрд░реНрд╖рдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП 'TITLE' рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреА рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдиреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
bs = get('bs') if bs is not None: TITLE = u' %s' % bs
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд╛ рдЦрддрд░рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗрд╡рд▓ рдКрдкрд░реА рдорд╛рдорд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред
рдЕрдиреНрдп рдпреВрдЖрд░рдПрд▓ рдФрд░ рдмреЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрд▓рд┐рдВрдЧ
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдпрд╛ рдХрд┐ рдкреЛрд░реНрдЯрд▓ рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдХреЗ рд╕рд╛рде рдХрдИ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдареАрдХ рд╣реИ, рд░рд┐рдкреЛрд░реНрдЯ рд╕рдореВрд╣реЛрдВ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ред
рддреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ_рдкреЗрдЬ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджреГрд╢реНрдп рд╕реЗ рдПрдХ рджреГрд╢реНрдп рдЬрдирд░реЗрдЯрд░ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреЛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
import os from django.template import RequestContext, Template from django.http import HttpResponse, Http404 from settings import PROJECT_ROOT from functools import partial def get_param(request, key=None, default=None, as_list=False): if key: if as_list: return request.GET.getlist(key) else: return request.GET.get(key, default) else: return request.GET.lists() class DynamicPage(object): " "
рдЗрд╕рдиреЗ рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреЛрд▓реЗ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рд╡реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд▓рдЧреЗ рд╣реБрдП рдереЗред рдЙрддреНрдкрд╛рджрди рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╣реАрдВ рдмрджрд▓реЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, html_id рд╡рд╛рд▓реЗ рдЙрдкрд░реЛрдХреНрдд рдЦреЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
def add_html_id(request, context): for (name, obj) in context.items(): if isinstance(obj, (Chart, Table)): obj.html_id = name show_report = DynamicPage('stat_tech/pages', parent_template='stat_tech/base.html', load_tags=['adminmedia', 'jquery', 'chapters'], post_calc=add_html_id)
рджреВрд╕рд░реЗ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рджреЛред
show_weekly = DynamicPage('stat_weekly/pages', parent_template = 'stat_weekly/base.html', load_tags = ['chapters', ' employees'], block_name=None)
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реА рдмреНрд▓реЙрдХ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
template = """ {% block chart %} {{ costs_monthly }} {{ costs_weekly }} {% endblock %} {% block responsible %} {% employee vasily_pupkin %}, {% employee ivan_ivanov %} {% endblock %} """
рддреАрд╕рд░реЗ рдореЗрдВ, рдЙрд╕ рдЗрдХрд╛рдИ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдХрд┐ рд╕рдмрдореЗрдиреВ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдирд╛ рд╣реИред
def add_division(request, context): div = Division.get_by_user(request.user) context['DIVISION'] = div context['SUBMENU'] = calc_goal_submenu(request.path, div) show_goal = DynamicPage('stat_goals/pages', load_tags = ['chapters'], block_name='report', parent_template = 'stat_goals/base.html', pre_calc = add_division)
Urls рдореЗрдВ, рдЗрди рд╕рднреА рдЖрд╡рд░рдгреЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рджреГрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ
(r'^stat/(?P<pagepath>.+)$', 'stat_tech.views.show_report'), (r'^weeklyreport/(?P<pagepath>.+)$', 'stat_weekly.views.show_weekly'), (r'^goals/(?P<pagepath>.+)$', 'stat_goals.views.show_goal'),
рдпрд╣рд╛рдБ рдПрдХ рдмрдбрд╝реЗ рдХреЗ рдКрдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдорд┐рдиреА-рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдврд╛рдВрдЪрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рднрд╛рд╖рд╛ рдХреА рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝рд╛ рдзрдХреНрдХрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
UPD: рдореИрдЬрд┐рдХ 4x рдХреЗ рд╕реБрдЭрд╛рд╡ рдкрд░, __name__ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХрдкреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреА рдирдХрд▓ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред