Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Django + Flask

Django + Flask

Configure Flask for Django 1.8.

Tzu-ping Chung

September 08, 2015
Tweet

More Decks by Tzu-ping Chung

Other Decks in Programming

Transcript

  1. <ul>      {%  for  user  in  users.all  %}  

       <li>          <a  href="{{  user.url  }}">              {{  user.username|capitalize  }}          </a>      </li>      {%  endfor  %}   </ul>
  2. <ul>      {%  for  user  in  users.all  %}  

       <li>          <a  href="{{  user.url  }}">              {{  user.username|capitalize  }}          </a>      </li>      {%  endfor  %}   </ul> (Template) Tag
  3. <ul>      {%  for  user  in  users.all  %}  

       <li>          <a  href="{{  user.url  }}">              {{  user.username|capitalize  }}          </a>      </li>      {%  endfor  %}   </ul> Variable
  4. <ul>      {%  for  user  in  users.all  %}  

       <li>          <a  href="{{  user.url  }}">              {{  user.username|capitalize  }}          </a>      </li>      {%  endfor  %}   </ul> Variable + Filter
  5. TEMPLATES  =  [          {    

                 'BACKEND':  '...',                  'DIRS':  [],                'OPTIONS':  {                          'context_processors':  [...],                          'debug':  False,                          'string_if_invalid':  '',                  },          },   ] Language-specific Setup Template-loading Setup
  6. Jinja2 • Armin Ronacher (aka mitsuhiko) • Inspired by the

    DTL • Standalone library • More programmer-friendly
  7. <ul>      {%  for  user  in  users.all()  %}  

       <li>          <a  href="{{  user.url  }}">              {{  user.username.toupper()  }}          </a>      </li>      {%  endfor  %}   </ul> Function calling
  8. <ul>      {%  for  user  in  users.get_friends(me)  %}  

       <li>          <a  href="{{  user.url  }}">              {{  user.username.toupper()  }}          </a>      </li>      {%  endfor  %}   </ul>
  9. Settings for Jinja2 {          'BACKEND':  (

                     'django.template.backends.'                  'jinja2.Jinja2'),          'DIRS':  [],          'APP_DIRS':  True,   },
  10. demoapp ├── jinja2 │ └── a_jinja2_template.html ├── models.py ├── templates

    │ └── a_django_template.html ├── urls.py └── views.py
  11. demoapp ├── jinja2 │ └── a_jinja2_template.html ├── models.py ├── templates

    │ └── a_django_template.html ├── urls.py └── views.py Configurable (not recommended)
  12. Jinja2 for Django • Auto-escape on • Custom template loader

    • Debug enhancements • Auto-reload • Undefined raises exceptions
  13. But • Jinja2 is not built (just) for Web •

    Web-related functionalities • Django internals
  14. {%  url  'pages:page'  name=page_name  %}   {%  static  'base/css/site.min.css'  %}

      {%  trans  'This  is  my  website!'  %}   {%  csrf_token  %}
  15. {          'BACKEND':  ('django.template.backends.'      

                               'jinja2.Jinja2'),          'DIRS':  [],          'APP_DIRS':  True,          'OPTIONS':  {                  'extensions':  [                          'jdj_tags.extensions.DjangoStatic',                          'jdj_tags.extensions.DjangoI18n',                  ]          },   },
  16. Jinja2 vs DTL • Functions vs template tags • Methods

    vs filters • Extensions are loaded by project
  17. The Flask Way • {%  url_for(endpoint,  **kwargs)  %} • Endpoint

    'static' • {%  get_flashed_messages(...)  %} • I18n API (already pretty similar) • {{  csrf_token()  }}