{"id":185180,"date":"2013-07-01T09:11:03","date_gmt":"2013-07-01T05:11:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=185180"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=185180","title":{"rendered":"<span class=\"post_title\">\u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e MVC \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0445 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0448\u044c \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u043d\u0430\u0435\u0448\u044c, \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0411\u0414, \u0438\u043b\u0438 HTML, \u0438\u043b\u0438 \u0441\u0445\u0435\u043c\u0443 url. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e. \u041d\u043e \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f MVC \u0432 Django, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u043e \u0444\u0430\u0439\u043b\u0430\u043c models, forms, views, templates \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0438 \u043a\u0430\u043a\u0443\u044e \u043d\u0430 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443. <\/p>\n<p>  \u0412\u0441\u0442\u0430\u043b\u0430 \u0443 \u043d\u0430\u0441 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 Django. \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 Oracle \u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e HighChart). \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0447\u0438\u0441\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u043e\u0439 \u043c\u0430\u0433\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435\u0441\u044f, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435. \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f\u043c \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u044d\u0442\u0438 \u043e\u0442\u0447\u0435\u0442\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432:  <\/p>\n<ol>\n<li>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0438 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441 \u043d\u0430\u043c\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043c\u043e\u0436\u043d\u043e. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043e\u043d\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u043b\u0430\u0434\u0435\u044e\u0442 SQL, \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c HTML \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0438\u043a\u0430\u043a Python\u2019\u043e\u043c, \u0438 \u0443\u0436 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 Django.<br \/>  \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0443\u0436\u043d\u043e \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043e\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043c\u043e\u0437\u0433 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u043e \u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u043b\u0438 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0446\u0435\u043b\u043e\u043c.<\/li>\n<li>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u0421\u0442\u0440\u0430\u043d\u0438\u0446 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0438 \u043e\u043d\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 (\u043d\u0443 \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0432 \u0411\u0414)<br \/>  \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u043f\u0438\u0445\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442 \u043f\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u0430\u043c.<br \/>   <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/443\/a25\/063\/443a250632d8bcd0fffdc82fe6822b97.png\"\/>\n<p>  \u0410 \u043d\u0430\u0434\u043e \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u00ab\u043d\u0435\u0447\u0442\u043e\u00bb \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0442\u0447\u0435\u0442\u0430 \u043e\u0442 \u0438 \u0434\u043e.<br \/>   <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/58b\/98c\/a8c\/58b98ca8cf71c815a491dca56208fdb4.png\"\/>  <\/li>\n<li>\u041d\u0443\u0436\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u0438 \u043e\u0442\u0447\u0435\u0442\u0430 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Django.<\/li>\n<li>\u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043e\u0442\u0447\u0435\u0442\u0430\u0445.<\/li>\n<\/ol>\n<p>  \u0411\u044b\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u0432 \u0431\u0430\u0437\u0435. \u041d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0435\u0433\u0447\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438, \u0447\u0435\u043c \u0432 \u0411\u0414. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u0430 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u0430\u043c\u043e\u0435 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<br \/>  \u0417\u043d\u0430\u0447\u0438\u0442, \u0444\u0430\u0439\u043b\u044b. \u041a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0432\u0438\u0436\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c. \u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0439. \u0418 JSON, \u0438 ini, \u0438 \u0432\u044b\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0432\u043e\u0439. XML \u0431\u044b\u043b \u043e\u0442\u043c\u0435\u0442\u0451\u043d \u0441\u0440\u0430\u0437\u0443, \u043a\u0430\u043a \u0442\u0440\u0443\u0434\u043d\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439. \u041d\u043e \u0432 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0435\u0447\u0435\u0440\u043e\u0432 \u043c\u0435\u043d\u044f \u043e\u0441\u0435\u043d\u0438\u043b\u043e \u2013 \u0430 \u0447\u0435\u043c \u0441\u0430\u043c Python \u043f\u043b\u043e\u0445? \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0439, \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u0441 \u044f\u0437\u044b\u043a\u043e\u043c \u0441\u043e\u0432\u0441\u0435\u043c (\u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e, \u0434\u0432\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0435\u043c\u0443 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438):  <\/p>\n<pre><code class=\"python\"># -*- coding: utf-8 -*- from statistics import OracleSelect, Chart, Table  select_traf = OracleSelect('user\/password@DB',                            &quot;&quot;&quot;select DAY, NSS_TRAF, BSS_TRAF                               from DAY_TRAFFIC                               where DAY &gt;= trunc(sysdate,'dd')-32&quot;&quot;&quot;)  chart_traf = Chart(selector=select_traf,                    x_column='DAY',                    y_columns=[('NSS_TRAF', u'NSS \u0442\u0440\u0430\u0444\u0444\u0438\u043a'),                               ('BSS_TRAF', u'BSS \u0442\u0440\u0430\u0444\u0444\u0438\u043a')])  table_traf = Table(selector=select_traf,                    columns=['DAY', 'NSS_TRAF',  'BSS_TRAF'])  template = &quot;&quot;&quot; {{ chart_traf }} {{ table_traf }} &quot;&quot;&quot; <\/code><\/pre>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 Chart \u0438 Table \u043e\u043f\u0446\u0438\u0439 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u044f \u043d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0438\u0445 \u0432\u0441\u0435.<br \/>  \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0414\u043b\u044f Django \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u043e \u043c\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c.<br \/>  \u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044f \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043b \u0441\u0435\u0431\u044f \u0437\u0430 \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u0447\u0438, \u043d\u043e \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0438\u0442\u043e\u043d\u0441\u043a\u0438\u043c \u0445\u0430\u043a\u043e\u043c \u043f\u0440\u044f\u043c\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0438\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u0431\u044b \u043a\u043e\u043d\u0444\u0438\u0433 \u0431\u044b\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043a\u0430\u043a \u0431\u044b \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0440\u0435\u0448\u0430\u043b\u0438\u0441\u044c. \u041d\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u043e\u043a.<\/p>\n<h5>\u0427\u0442\u0435\u043d\u0438\u0435(\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435) \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430<\/h5>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u00ab\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u00bb \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.  <\/p>\n<pre><code class=\"python\">import os from django.template import RequestContext, Template from django.http import HttpResponse, Http404 from settings import PROJECT_ROOT # \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 __file__ \u0432 \u0444\u0430\u0439\u043b\u0435 settings.py  def dynamic_page(request, report_path):     ctx_dict = {}      execfile(os.path.join(PROJECT_ROOT, 'reports', report_path + '.py'), ctx_dict)      templ_header = '{% extends &quot;base.html&quot; %}{% block content %}'     templ_footer = '{% endblock %}'     template = Template(templ_header + ctx_dict['template'] + templ_footer)      context = RequestContext(request)     context.autoescape = False     context.update(ctx_dict)      return HttpResponse(template.render(context)) <\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e execfile \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0412\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 ctx_dict. \u0411\u0435\u0440\u0451\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 template \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 RequestContext \u0438 \u0441\u0432\u0435\u0436\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<br \/>  \u0412 urls.py \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c  <\/p>\n<pre><code class=\"python\">(r'^reports\/(?P&lt;report_path&gt;.+)$', 'statistics.views.dynamic_page'), <\/code><\/pre>\n<p>  <\/p>\n<h5>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u0442\u0447\u0435\u0442 \u0438 \u0438\u0437 \u043e\u0442\u0447\u0435\u0442\u0430<\/h5>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a get-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c ctx_dict \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 execfile  <\/p>\n<pre><code class=\"python\">def dynamic_page(request, report_path):     ctx_dict = {'get': request.GET.get}     ... <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0431\u0435\u0437\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f get, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0441\u0442\u0430\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e request\u2019\u0430. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0442\u0443\u0442 \u0431\u044b \u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 request \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u043e\u0432\u044b\u0439.<br \/>  \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0430\u0441\u044c \u0438 \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 html-id \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0435\u043c. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 javascript \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e \u0436\u0435 \u0438\u043c\u044f, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0438\u0442\u043e\u043d\u0435 (\u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c). \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0432 Chart, \u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0448\u0435\u0440\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432 \u0441\u0442\u0438\u043b\u0435  <\/p>\n<pre><code class=\"python\">chart_name = Chart(select, x_col, config, ..., html_id='chart_name') <\/code><\/pre>\n<p>  \u041b\u0443\u0447\u0448\u0435 \u0443\u0436 \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u0432\u0438\u0436\u043a\u0430 \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 id \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f ctx_dict \u0432 execfile.  <\/p>\n<pre><code class=\"python\">    ...     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     ... <\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 ctx_dict. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u044b\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 RequestContext. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8216;TITLE&#8217; \u0434\u043b\u044f \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u0451\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u0438 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e  <\/p>\n<pre><code class=\"python\">bs = get('bs') if bs is not None:     TITLE = u'\u0422\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u0411\u0421 %s' % bs <\/code><\/pre>\n<p>  \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0438 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0438. \u041d\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435\u043c \u043e\u0431 \u0438\u043c\u0435\u043d\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u0430 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0438\u0436\u043d\u0438\u0439).<\/p>\n<h5>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e \u0434\u0440\u0443\u0433\u0438\u0445 url \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432<\/h5>\n<p>  \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u0434\u043e\u0448\u043b\u043e \u0434\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430 \u041f\u043e\u0440\u0442\u0430\u043b\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u044b \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438, \u043d\u0443 \u0438 \u043d\u0430\u043c \u0441\u0430\u043c\u0438\u043c \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<br \/>  \u0417\u043d\u0430\u0447\u0438\u0442 dynamic_page \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0442\u0430\u0442\u044c \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u044c\u044e\u0445\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0432\u044c\u044e\u0445. \u0427\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e.  <\/p>\n<pre><code class=\"python\">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):      # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 view     def __init__(self,                  subpath, # \u041f\u0443\u0442\u044c, \u043e\u0442 \u043a\u043e\u0440\u043d\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b                  parent_template = &quot;base.html&quot;,                  load_tags = (), # \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u0442\u044d\u0433\u043e\u0432                  block_name = 'content',                  pre_calc = lambda request, context: None, # \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c execfile                  post_calc = lambda request, context: None): # \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f execfile         self.templ_header = ('{% extends &quot;' + parent_template + '&quot; %}' +                              DynamicPage.loading_tags(load_tags) +                              DynamicPage.block_top(block_name))         self.templ_footer = DynamicPage.block_foot(block_name)         self.subpath = subpath         self.pre_calc = pre_calc         self.post_calc = post_calc      @staticmethod     def block_top(block_name):         if block_name:             return &quot;{% block &quot; + block_name + &quot; %}&quot;         else:             return ''      @staticmethod     def block_foot(block_name):         if block_name:             return &quot;{% endblock %}&quot;         else:             return ''      @staticmethod     def loading_tags(tags):         return ''.join(['{% load ' + tag + ' %}' for tag in tags])      # \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 view     def __call__(self, request, pagepath):         ctx_dict = self.get_context(request, pagepath)          if 'response' in ctx_dict and isinstance(ctx_dict['response'], HttpResponse):             return ctx_dict['response'] # \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e response \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430             # \u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u043e\u0432, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445, \u0447\u0442\u043e \u0438 html-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430         else:             template = Template(self.templ_header + ctx_dict['template'] + self.templ_footer)              context = RequestContext(request)             context.autoescape = False             context.update(ctx_dict)              return HttpResponse(template.render(context))      def get_context(self, request, pagepath):         fullpath = os.path.join(PROJECT_ROOT, self.subpath, pagepath + '.py')          if not os.path.exists(fullpath):             raise Http404          ctx_dict = {'get': partial(get_param, request), 'request': request}          self.pre_calc(request, ctx_dict)         execfile(fullpath, ctx_dict)         self.post_calc(request, ctx_dict)         return ctx_dict <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438. \u0418\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b. \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0436\u0435 \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0438\u0441\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432\u044b\u0448\u0435 \u0438\u0433\u0440\u044b \u0441 html_id.  <\/p>\n<pre><code class=\"python\">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) <\/code><\/pre>\n<p>  \u0412 \u0434\u0440\u0443\u0433\u043e\u043c, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0430 \u0434\u0432\u0430.  <\/p>\n<pre><code class=\"python\">show_weekly = DynamicPage('stat_weekly\/pages',                           parent_template = 'stat_weekly\/base.html',                           load_tags = ['chapters', ' employees'],                           block_name=None) <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0431\u043b\u043e\u043a\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441 \u043e\u0442\u0447\u0451\u0442\u043e\u043c  <\/p>\n<pre><code class=\"python\">template = &quot;&quot;&quot; {% block chart %} {{ costs_monthly }} {{ costs_weekly }} {% endblock %} {% block responsible %} {% employee vasily_pupkin %}, {% employee ivan_ivanov %} {% endblock %} &quot;&quot;&quot; <\/code><\/pre>\n<p>  \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c, \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043a\u0430\u043a \u0438 \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c, \u0430 \u0442\u0430\u043a \u0436\u0435, \u0432 \u043a\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043c\u0435\u043d\u044e.  <\/p>\n<pre><code class=\"python\">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) <\/code><\/pre>\n<p>  \u0412 urls \u0432\u0441\u0435 \u044d\u0442\u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0432\u044c\u044e\u0448\u043a\u0438  <\/p>\n<pre><code class=\"python\">    (r'^stat\/(?P&lt;pagepath&gt;.+)$', 'stat_tech.views.show_report'),     (r'^weeklyreport\/(?P&lt;pagepath&gt;.+)$', 'stat_weekly.views.show_weekly'),     (r'^goals\/(?P&lt;pagepath&gt;.+)$', 'stat_goals.views.show_goal'), <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043c\u0438\u043d\u0438-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u043e\u0432\u0435\u0440\u0445 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043e\u043d \u0443\u0434\u0430\u0447\u043d\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u043c\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0435\u0448\u0430\u044e\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0433\u043a\u0430 \u0438\u0445 \u0440\u0430\u0437\u0434\u0432\u0438\u043d\u0443\u0442\u044c, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044f\u0437\u044b\u043a\u0430.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/185180\/\"> http:\/\/habrahabr.ru\/post\/185180\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0445 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0448\u044c \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u043d\u0430\u0435\u0448\u044c, \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0411\u0414, \u0438\u043b\u0438 HTML, \u0438\u043b\u0438 \u0441\u0445\u0435\u043c\u0443 url. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e. \u041d\u043e \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f MVC \u0432 Django, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u043e \u0444\u0430\u0439\u043b\u0430\u043c models, forms, views, templates \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0438 \u043a\u0430\u043a\u0443\u044e \u043d\u0430 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443. <\/p>\n<p>  \u0412\u0441\u0442\u0430\u043b\u0430 \u0443 \u043d\u0430\u0441 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 Django. \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 Oracle \u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e HighChart). \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0447\u0438\u0441\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u043e\u0439 \u043c\u0430\u0433\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435\u0441\u044f, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435. \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f\u043c \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u044d\u0442\u0438 \u043e\u0442\u0447\u0435\u0442\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-185180","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/185180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=185180"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/185180\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=185180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=185180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=185180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}