рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдЧрд╛-рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рднрд╛рдЧ 2: рдЯреЗрдореНрдкрд▓реЗрдЯ

рдпрд╣ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдлреНрд▓рд╛рд╕реНрдХ рдорд╛рдЗрдХреНрд░реЛрдлреНрд░рд╛рдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВред

рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рдХрд╛рдлреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдореМрд▓рд┐рдХрддрд╛ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП microblog рдХрд╣рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
рднрд╛рдЧ 1: рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!
рднрд╛рдЧ 2: рдЯреЗрдореНрдкрд▓реЗрдЯ
рднрд╛рдЧ 3: рдкреНрд░рдкрддреНрд░
рднрд╛рдЧ 4: рдбреЗрдЯрд╛рдмреЗрд╕
рднрд╛рдЧ 5: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди
рднрд╛рдЧ 6: рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреЗрдЬ рдФрд░ рдЕрд╡рддрд╛рд░
рднрд╛рдЧ 7: рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг
рднрд╛рдЧ 8: рдЕрдиреБрдпрд╛рдпреА, рд╕рдВрдкрд░реНрдХ рдФрд░ рдорд┐рддреНрд░
рднрд╛рдЧ 9: рдЕрдВрдХреБрд░рдг
рднрд╛рдЧ 10: рдкреВрд░реНрдг рдкрд╛рда рдЦреЛрдЬ
рднрд╛рдЧ 11: рдИрдореЗрд▓ рд╕рдорд░реНрдерди
рднрд╛рдЧ 12: рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг
рднрд╛рдЧ 13: рддрд┐рдерд┐ рдФрд░ рд╕рдордп
рднрд╛рдЧ 14: I18n рдФрд░ L10n
рднрд╛рдЧ 15: рдЕрдЬрд╛рдХреНрд╕
рднрд╛рдЧ 16: рдбрд┐рдмрдЧрд┐рдВрдЧ, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ
рднрд╛рдЧ 17: рд▓рд┐рдирдХреНрд╕ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рднреА рддреИрдирд╛рдд рд╣реИрдВ!)
рднрд╛рдЧ 18: рд╣рд░реЛрдХреВ рдХреНрд▓рд╛рдЙрдб рдкрд░ рддреИрдирд╛рддреА


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐


рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ:

 microblog\ flask\ <  > app\ static\ templates\ __init__.py views.py tmp\ run.py 


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк run.py script рдХреЛ рд░рди рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ url http: // localhost: 5000 рдЦреЛрд▓реЗрдВред

рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЫреЛрдбрд╝рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╣рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ


рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдПрдХ рд╣реЗрдбрд░ рд╣реЛ рдЬреЛ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╛рдирдХ рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рд╕рд╣реА рд╕рдордп рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред

рдПрдХ рдмрдбрд╝реЗ рдФрд░ рд╕реБрдВрджрд░ рд╣реЗрдбрд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣рдорд╛рд░реА рдкреНрд░рд╕реНрддреБрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ HTML рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
 from app import app @app.route('/') @app.route('/index') def index(): user = { 'nickname': 'Miguel' } #   return ''' <html> <head> <title>Home Page</title> </head> <body> <h1>Hello, ''' + user['nickname'] + '''</h1> </body> </html> ''' 

рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рдирдХрд▓реА рдпрд╛ рдХрд╛рд▓реНрдкрдирд┐рдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдореБрдЭрд╕реЗ рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рднрд╛рд░реА HTML рдкреГрд╖реНрда рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреЛрдб рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдПрдХ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рджреГрд╢реНрдп рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ HTML рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ? рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдорд╛рдкрдиреАрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ


рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдФрд░ рд▓реЗрдЖрдЙрдЯ рдХреЗ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдкрдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрдЧреА? рдЬрдм рдЖрдк рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕рдХреЗ [рд╕рд╛рдЗрдЯ] рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рддреЗрдЬрд╕реНрд╡реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред

рд╣рдо рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ ( app/templates/index.html рдлрд╝рд╛рдЗрд▓) рд▓рд┐рдЦреЗрдВрдЧреЗ:
 <html> <head> <title>{{title}} - microblog</title> </head> <body> <h1>Hello, {{user.nickname}}!</h1> </body> </html> 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдорд╛рдирдХ HTML рдкреГрд╖реНрда рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде: рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ {{...}} рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИрдВ

рдЕрдм рд╣рдорд╛рд░реЗ рд╡реНрдпреВ рдлрдВрдХреНрд╢рди рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдлрд╝рд╛рдЗрд▓ app/views.py ):
 from flask import render_template from app import app @app.route('/') @app.route('/index') def index(): user = { 'nickname': 'Miguel' } #   return render_template("index.html", title = 'Home', user = user) 


рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреЗрдЬ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдлреНрд▓рд╛рд╕реНрдХ рд╕реЗ рдПрдХ рдирдпрд╛ рдлрдВрдХреНрд╢рди рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рд░реЗрдВрдбрд░_рдЯреЗрдордкреНрд▓реЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдирд╛рдо рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рддреИрдпрд╛рд░ рддрд░реНрдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рджреЗрддрд╛ рд╣реИред

рд╣реБрдб рдХреЗ рддрд╣рдд: рд░реЗрдВрдбрд░_рдЯрдордкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рдиреНрдЬрд╛ 2 рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдлреНрд▓рд╛рд╕реНрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЬрд┐рдирдЬрд╛ 2 рдЯреЗрдореНрдкрд▓реЗрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде {{...}} рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдСрдкрд░реЗрдЯрд░реЛрдВ


Jinja2 рдЯреЗрдореНрдкреНрд▓реЗрдЯ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд░реНрдерди рдирд┐рдпрдВрддреНрд░рдг рдХрдердиреЛрдВ рдХреЛ {% ...%} рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рднреАрддрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ ( app/templates/index.html рдлрд╝рд╛рдЗрд▓) рдореЗрдВ рдПрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВ:
 <html> <head> {% if title %} <title>{{title}} - microblog</title> {% else %} <title>Welcome to microblog</title> {% endif %} </head> <body> <h1>Hello, {{user.nickname}}!</h1> </body> </html> 


рдЕрдм рд╣рдорд╛рд░рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреЗрдЬ рдХреЗ рдирд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрд╡рд╛рдж рдХреЗ рдмрджрд▓реЗ рдореЗрдВ, рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣рдореЗрдВ рдЕрдкрдирд╛ рдирд╛рдо рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдЖрдк рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдлрдВрдХреНрд╢рди рдореЗрдВ рд░реЗрдВрдбрд░_рдЯреЗрдордкреНрд▓реЗрдЯ рдХреЙрд▓ рд╕реЗ рд╣реЗрдбрд░ рддрд░реНрдХ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреИрдЯрд░реНрди рдЪрдХреНрд░


рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╢рд╛рдпрдж рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдЙрд╕рдХреА рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╣рд╛рд▓рд┐рдпрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдЧрд╛, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдХреБрдЫ рдирдХрд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдХреБрдЫ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдХ рдХрд░реЗрдВрдЧреЗ ( app/views.py ):
 def index(): user = { 'nickname': 'Miguel' } #   posts = [ #    { 'author': { 'nickname': 'John' }, 'body': 'Beautiful day in Portland!' }, { 'author': { 'nickname': 'Susan' }, 'body': 'The Avengers movie was so cool!' } ] return render_template("index.html", title = 'Home', user = user, posts = posts) 


рдХрд╕реНрдЯрдо рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХрд╛ рд▓реЗрдЦрдХ рдФрд░ рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реЛрдЧрд╛ред рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрди рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрд╛рдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдирдХрд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХреЗрдВред

рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рддрд░рдл рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдирдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдореМрдЬреВрджрд╛ рд╕реВрдЪреА рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рд╕рдВрджреЗрд╢ рд╕рдмрдорд┐рдЯ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЙрддрдиреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рддрдирд╛ рдХрд┐ рджреГрд╢реНрдп рднреЗрдЬрддрд╛ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛ (рдлрд╝рд╛рдЗрд▓ app/templates/index.html ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ:
 <html> <head> {% if title %} <title>{{title}} - microblog</title> {% else %} <title>microblog</title> {% endif %} </head> <body> <h1>Hi, {{user.nickname}}!</h1> {% for post in posts %} <p>{{post.author.nickname}} says: <b>{{post.body}}</b></p> {% endfor %} </body> </html> 


рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдирдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕


рдЖрдЬ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╖рдп рдХреЛ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗред

рд╣рдорд╛рд░реЗ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧрд┐рдВрдЧ рдРрдк рдХреЛ рдкреГрд╖реНрда рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдкрдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ, рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╣реЛрдВрдЧреЗред

рд╣рдо рдЕрдкрдиреЗ index.html рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдврд╝рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрди рд╕рднреА рдХреЙрдкрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЬрд┐рдирдЬрд╛ 2 рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдкреЗрдЬ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмреБрдирд┐рдпрд╛рджреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЕрдиреНрдп рд╕рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдВрдЧреЗред

рдЕрдм рд╣рдо рдЖрдзрд╛рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░, рд╕рд╛рде рд╣реА рд╣реЗрдбрд░ рд▓реЙрдЬрд┐рдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛ (рдлрд╛рдЗрд▓ app/templates/base.html ):
 <html> <head> {% if title %} <title>{{title}} - microblog</title> {% else %} <title>microblog</title> {% endif %} </head> <body> <div>Microblog: <a href="/index">Home</a></div> <hr> {% block content %}{% endblock %} </body> </html> 


рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рд╣рдордиреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП block рдХрдВрдЯреНрд░реЛрд▓ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХрд┐ рдмрдЪреНрдЪреЗ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╣рд╛рдБ рдбрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдмреНрд▓реЙрдХ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рджрд┐рдП рдЧрдП рд╣реИрдВред

рдЕрдм рдпрд╣ рд╣рдорд╛рд░реЗ index.html рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ base.html (рдлрд╝рд╛рдЗрд▓ app/templates/index.html ) рд╕реЗ base.html рдорд┐рд▓реЗ:
 {% extends "base.html" %} {% block content %} <h1>Hi, {{user.nickname}}!</h1> {% for post in posts %} <div><p>{{post.author.nickname}} says: <b>{{post.body}}</b></p></div> {% endfor %} {% endblock %} 


рдЕрдм рдкреГрд╖реНрда рдХреА рд╕рдордЧреНрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ base.html рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рдордиреЗ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдХреЗрд╡рд▓ рднрд╛рдЧ рдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред extends рдмреНрд▓реЙрдХ рджреЛрдиреЛрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдмреАрдЪ рдПрдХ рд╡рдВрд╢рд╛рдиреБрдЧрдд рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд┐рдирдЬрд╛ 2 рдЬрд╛рдирддрд╛ рд╣реИ: рдЕрдЧрд░ рд╣рдореЗрдВ index.html рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ base.html рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ content рдирд╛рдордХ рдорд┐рд▓рд╛рди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдЬрд┐рдВрдЬрд╛ 2 рджреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдЬрдм рд╣рдо рдирдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ base.html рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ

рдЕрдВрддрд┐рдо рд╢рдмреНрдж


рдпрджрд┐ рдЖрдк рд╕рдордп рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ:
рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧ-0.2.zip рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдлреНрд▓рд╛рд╕реНрдХ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд░реВрдкреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЖрдкрд╕реЗ рдлрд┐рд░ рдорд┐рд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдорд┐рдЧреБрдПрд▓

Source: https://habr.com/ru/post/In193260/


All Articles