changeset 09eea0bc77d2 in www.tryton.org:default
details: https://hg.tryton.org/www.tryton.org?cmd=changeset&node=09eea0bc77d2
description:
        Use function to construct downloads and videos URLs
diffstat:

 app.py                       |   22 ++
 templates/presentations.html |  332 +++++++++++++++++++++---------------------
 2 files changed, 188 insertions(+), 166 deletions(-)

diffs (856 lines):

diff -r 6f8e9af6f3fc -r 09eea0bc77d2 app.py
--- a/app.py    Sun Sep 18 16:53:38 2022 +0200
+++ b/app.py    Sun Sep 18 18:25:10 2022 +0200
@@ -67,6 +67,10 @@
     'presentations-alt', 'contribute-alt', 'foundation-alt', 'supporters-alt',
     'donate-alt', 'donate_thanks', 'donate_cancel', 'service_providers-alt',
     'sitemap.xml']
+app.config['DOWNLOADS_DOMAIN'] = os.environ.get(
+    'DOWNLOADS_DOMAIN', 'downloads.tryton.org')
+app.config['VIDEOS_DOMAIN'] = os.environ.get(
+    'VIDEOS_DOMAIN', 'videos.tryton.org')
 app.config['CDN_DOMAIN'] = os.environ.get('CDN_DOMAIN')
 app.config['CDN_HTTPS'] = ast.literal_eval(os.environ.get('CDN_HTTPS', 'True'))
 app.config['SITEMAP_IGNORE_ENDPOINTS'] = ['events', 'events-alt', 'events-ics']
@@ -122,6 +126,24 @@
     return _slugify_hyphenate_re.sub('-', value)
 
 
+def url_for_downloads(*args):
+    return urljoin('//' + app.config['DOWNLOADS_DOMAIN'], os.path.join(*args))
+
+
[email protected]_processor
+def inject_url_for_dowloads():
+    return dict(url_for_downloads=url_for_downloads)
+
+
+def url_for_videos(*args):
+    return urljoin('//' + app.config['VIDEOS_DOMAIN'], os.path.join(*args))
+
+
[email protected]_processor
+def inject_url_for_videos():
+    return dict(url_for_videos=url_for_videos)
+
+
 def cdn_url_for(*args, **kwargs):
     if app.config['CDN_DOMAIN']:
         return _cdn_url_for(*args, **kwargs)
diff -r 6f8e9af6f3fc -r 09eea0bc77d2 templates/presentations.html
--- a/templates/presentations.html      Sun Sep 18 16:53:38 2022 +0200
+++ b/templates/presentations.html      Sun Sep 18 18:25:10 2022 +0200
@@ -39,57 +39,57 @@
     <h2 id="TSD2021">TSD2021</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Novedades%20Tryton%206.2.pdf">New 
functionality in Tryton 6.2 and 6.0</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Novedades Tryton 
6.2.pdf') }}">New functionality in Tryton 6.2 and 6.0</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/fSeE_1-Oqag";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Datalife%20-%204agro.pdf">Example 
Verticalization: 4agro and agroalimentary sector</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Datalife - 4agro.pdf') 
}}">Example Verticalization: 4agro and agroalimentary sector</a>,
             <em>Nicolas Lopez</em>,
             <a href="https://youtu.be/XXjdsATiHf8";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Presentacion%20Tryton%20Alicante%20calidad%202021.pps">Quality
 management: Tryton for manufacturing companies</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Presentacion Tryton 
Alicante calidad 2021.pps') }}">Quality management: Tryton for manufacturing 
companies</a>,
             <em>Yunior Lobo</em>,
             <a href="https://youtu.be/m8rvxF37kA8";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Datalife%20-%20Confecci%C3%B3n%20en%20campo.pdf">Preparation
 in field: Creating pallets using mobility</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Datalife - Confección en 
campo.pdf') }}">Preparation in field: Creating pallets using mobility</a>,
             <em>Sergio Morillo</em>,
             <a href="https://youtu.be/z3wcqlI_e0s";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Conciliacion%20Bancaria%20con%20Tryton.pdf">Bank
 Reconciliation with Tryton</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Conciliacion Bancaria 
con Tryton.pdf') }}">Bank Reconciliation with Tryton</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/C0iUD6ukEzg";>Video</a>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TSD2021/Shopify.pdf">How to 
connect Tryton with Shopify</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Shopify.pdf') }}">How to 
connect Tryton with Shopify</a>,
             <em>Adrià Tarroja Caubet</em>,
             <a href="https://youtu.be/garUiAGkt20";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Tryton%20Academy.pdf">The Tryton 
Academy: How to become a Tryton Expert</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Tryton Academy.pdf') 
}}">The Tryton Academy: How to become a Tryton Expert</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/OACfO_JTTVE";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Presentacion%20Tryton%20Alicante%20Alimentacion%202021.pps">Tryton
 as an integral solution for food manufacturing companies</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Presentacion Tryton% 
Alicante Alimentacion 2021.pps') }}">Tryton as an integral solution for food 
manufacturing companies</a>,
             <em>Yunior Lobo</em>,
             <a href="https://youtu.be/M_OTS35a5L4";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Datalife%20-%20Ley%2011%2021.pdf">Law 
11/2021: Software formal obligations</a>,
+            <a href="{{ url_for_downloads('TSD2021', 'Datalife - Ley 11 
21.pdf') }}">Law 11/2021: Software formal obligations</a>,
             <em>Ramón Oliver</em>,
             <a href="https://youtu.be/n3Uev06FXt0";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/Logistica_Inversa_TRYTON_2021.pdf">Package
 reverse logistics: Tryton based managment model</a>,
+            <a href="{{ url_for_downloads('TSD2021', 
'Logistica_Inversa_TRYTON_2021.pdf') }}">Package reverse logistics: Tryton 
based managment model</a>,
             <em>Javier Escudero</em>,
             <a href="https://youtu.be/pZaW7LiKJ-E";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2021/04%20-%20Control%20horario.pdf">How to 
implement attendance control in companies</a>,
+            <a href="{{ url_for_downloads('TSD2021', '04 - Control 
horario.pdf') }}">How to implement attendance control in companies</a>,
             <em>Marcos Sabater</em>,
             <a href="https://youtu.be/Wocx3_kfkhY";>Video</a>
         </li>
@@ -104,32 +104,32 @@
     <h2 id="TSD2019">TSD2019</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Bienvenida.pdf">Welcome and 
presentation</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Bienvenida.pdf') 
}}">Welcome and presentation</a>,
             <em>Ricardo Laborda</em>,
             <a href="https://youtu.be/p9yW0fxiiDs";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/What%20can%20Tryton%20offer%20to%20my%20company.pdf">What
 can Tryton offer my company?</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'What can Tryton offer to 
my company.pdf') }}">What can Tryton offer my company?</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/1LwzV7TsH-E";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/como_lo_hacen.html">Tryton: How they 
do it</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'como_lo_hacen.html') 
}}">Tryton: How they do it</a>,
             <em>José Salvador</em>,
             <a href="https://youtu.be/oLWkQelGqy0";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/builing_large_health_networks_gnuhealth.pdf">Tryton
 and the GNU Health federation</a>,
+            <a href="{{ url_for_downloads('TSD2019', 
'builing_large_health_networks_gnuhealth.pdf') }}">Tryton and the GNU Health 
federation</a>,
             <em>Luis Falcon</em>,
             <a href="https://youtu.be/1GBFz59eXkA";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/4agro%20y%20el%20sector%20agroalimentario.pdf">4agro
 and the agrolimentari sector</a>,
+            <a href="{{ url_for_downloads('TSD2019', '4agro y el sector 
agroalimentario.pdf') }}">4agro and the agrolimentari sector</a>,
             <em>Ricardo Laborda</em>,
             <a href="https://youtu.be/ODn1jRtFv_E";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/eCommerce%20con%20Tryton.pdf">eCommerce
 from Tryton</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'eCommerce con 
Tryton.pdf') }}">eCommerce from Tryton</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/SqAgs7w3LPQ";>Video</a>
         </li>
@@ -139,47 +139,47 @@
             <a href="https://youtu.be/DpnS2sJRHwY";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Caso%20%C3%A9xito%20Grupo%20Roca.pdf">Tryton
 business case: Roca Group</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Caso éxito Grupo 
Roca.pdf') }}">Tryton business case: Roca Group</a>,
             <em>Ricardo Laborda</em>,
             <a href="https://youtu.be/4rNzHsQjPC0";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Sistemas%20de%20movilidad%20para%20aportar%20m%C3%A1s%20valor_%20Tryvy.pdf">Mobility
 systems to give value: tryvy</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Sistemas de movilidad 
para aportar más valor_ Tryvy.pdf') }}">Mobility systems to give value: 
tryvy</a>,
             <em>Sergio Morillo</em>,
             <a href="https://youtu.be/wezQlgOlYyc";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/4agro%20y%20el%20sector%20agroalimentario.pdf">Sale
 Costs and Return Management</a>,
+            <a href="{{ url_for_downloads('TSD2019', '4agro y el sector 
agroalimentario.pdf') }}">Sale Costs and Return Management</a>,
             <em>Nicolas Lopez</em>,
             <a href="https://youtu.be/caOe7rbaWDo";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Orientacion%20Tryton%20Industria%20Alimentaria.pps">Tryton
 oriented to Food Industry</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Orientacion Tryton 
Industria Alimentaria.pps') }}">Tryton oriented to Food Industry</a>,
             <em>Jesus Rouco</em>,
             <a href="https://youtu.be/G96cj-SU_3U";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Novedades%20Tryton%205.4%20y%205.2.pdf">New
 functionalities on Tryton 5.4</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Novedades Tryton 5.4 y 
5.2.pdf') }}">New functionalities on Tryton 5.4</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/MEXXmTPqTcI";>Video</a>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TSD2019/EDI.pdf">EDI and 
Attendance Control</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'EDI.pdf') }}">EDI and 
Attendance Control</a>,
             <em>Ricardo Laborda</em>,
             <a href="https://youtu.be/qy7Ftntbncc";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Localizacion%20Espa%C3%B1ola%20Jornadas%202019.pdf">Tryton
 Spanish Localization</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Localizacion Española 
Jornadas 2019.pdf') }}">Tryton Spanish Localization</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/NoYz0VfPjps";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Productividad%20en%20la%20gesti%C3%B3n%20financiera%20-%20Ejemplo%20de%20Intrastat.pdf">Productivity
 in financial: Intrastat</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Productividad en la 
gestión financiera - Ejemplo de Intrastat.pdf') }}">Productivity in financial: 
Intrastat</a>,
             <em>Ramón Oliver</em>,
             <a href="https://youtu.be/l-x8wv7BR4Q";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TSD2019/Ciclo%20Vida%20Software%20libre%20sostenible.pdf">Tryton
 and the lifecycle of Open Source</a>,
+            <a href="{{ url_for_downloads('TSD2019', 'Ciclo Vida Software 
libre sostenible.pdf') }}">Tryton and the lifecycle of Open Source</a>,
             <em>Nicolas Lopez</em>,
             <a href="https://youtu.be/DntazOQE11M";>Video</a>
         </li>
@@ -194,17 +194,17 @@
             <a href="https://youtu.be/ltNsxEu4l20";>Video1</a>, <a 
href="https://youtu.be/4nOYc5A2d_4";>Video2</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUM2019/Managing%20a%20service%20company%20with%20Tryton.pdf">Managing
 a service company with Tryton</a>,
+            <a href="{{ url_for_downloads('TUM2019', 'Managing a service 
company with Tryton.pdf') }}">Managing a service company with Tryton</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/ZlCn6CcrH5k";>Video</a>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUM2019/shine.pdf">I used to 
Excel, but now I Shine</a>,
+            <a href="{{ url_for_downloads('TUM2019', 'shine.pdf') }}">I used 
to Excel, but now I Shine</a>,
             <em>Albert Cervera i Areny</em>,
             <a href="https://youtu.be/4XtOlxZOkHw";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUM2019/Building%20Mobile%20Application%20connected%20to%20Tryton.pdf">Building
 mobile applications connected to Tryton</a>,
+            <a href="{{ url_for_downloads('TUM2019', 'Building Mobile 
Application connected to Tryton.pdf') }}">Building mobile applications 
connected to Tryton</a>,
             <em>Sergi Almacellas Abellana</em>,
             <a href="https://youtu.be/Afwj1nadb8Y";>Video</a>
         </li>
@@ -219,12 +219,12 @@
             <a href="https://youtu.be/S1JmgNbNeeo";>Video1</a>, <a 
href="https://youtu.be/Oe-e1njvKek";>Video2</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUM2019/warehouse_management.pdf">Use Case: 
Tryton for warehouse management</a>,
+            <a href="{{ url_for_downloads('TUM2019', 
'warehouse_management.pdf') }}">Use Case: Tryton for warehouse management</a>,
             <em>Maxime Richez</em>
             <a href="https://youtu.be/mFcfFhGz9wQ";>Video</a>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUM2019/lisp-erp/">Lisp 
ERP</a>,
+            <a href="{{ url_for_downloads('TUM2019', 'lisp-erp') }}">Lisp 
ERP</a>,
             <em>Francesc Guillen</em>,
             <a href="https://youtu.be/cuX1_RZIIvM";>Video</a>
         </li>
@@ -234,7 +234,7 @@
     <h2 id="PyConFr2018">PyConFr 2018</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/PyConFr2018/optimisation-transactional-application.odp">Optimiser
 une application principalement transactionnelle (retour d'expérience avec 
Tryton)</a>,
+            <a href="{{ url_for_downloads('PyConFr2018', 
'optimisation-transactional-application.odp') }}">Optimiser une application 
principalement transactionnelle (retour d'expérience avec Tryton)</a>,
             <em>Cédric Krier</em>,
             <a href="https://youtu.be/dTJ4VPSbVZs";>Video</a>
         </li>
@@ -244,7 +244,7 @@
     <h2 id="TUL2017">TUL2017</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/past-present-future-tryton.odp">Past, 
Present and Future of Tryton</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'past-present-future-tryton.odp') }}">Past, Present and Future of Tryton</a>,
             <em>Cédric Krier</em>,
             Video <a href="https://youtu.be/Gw6kAXkOmMg";>part 1</a> &amp; <a 
href="https://youtu.be/prKWX6LwOOI";>part 2</a></li>
         <li>
@@ -253,47 +253,47 @@
             <a href="https://youtu.be/0q6JXq3PMz0";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/custom-webshop-1-month.odp">Custom 
web-shop from scratch to production in 1 month</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'custom-webshop-1-month.odp') }}">Custom web-shop from scratch to production in 
1 month</a>,
             <em>Cédric Krier and Nicolas ÉVrard</em>,
             <a href="https://youtu.be/MA1DnlnTy7I";>Video</a>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUL2017/kalenis.pdf">Kalenis: 
Integrating LIMS &amp; ERP</a>,
+            <a href="{{ url_for_downloads('TUL2017', 'kalenis.pdf') 
}}">Kalenis: Integrating LIMS &amp; ERP</a>,
             <em>Sebastián Marró and Ignacio Parszyk</em>,
             <a href="https://youtu.be/Iknsb16h8iM";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/tul2017_saluc_v1pdf.pdf">Demonstration 
of a pre-purchase Process in Tryton</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'tul2017_saluc_v1pdf.pdf') }}">Demonstration of a pre-purchase Process in 
Tryton</a>,
             <em>Thierry Bruyere and Maxime Richez</em>,
             <a href="https://youtu.be/atMO62IDP1c";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/paybox-cryptolog-modules.odp">Two new 
modules for Tryton: Paybox payment system and electronic signature</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'paybox-cryptolog-modules.odp') }}">Two new modules for Tryton: Paybox payment 
system and electronic signature</a>,
             <em>Adrien Ben-Duc</em>,
             <a href="https://youtu.be/5-2YoMV1wX0";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/PluggableBackends.odp">Pluggable 
backends in Tryton: an how-to</a>,
+            <a href="{{ url_for_downloads('TUL2017', 'PluggableBackends.odp') 
}}">Pluggable backends in Tryton: an how-to</a>,
             <em>Nicolas Évrard</em>,
             <a href="https://youtu.be/yRg2mHI8XBI";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/gnuhealth-franceville-gabon.odp">Gnu 
Health Implementation in Franceville - Gabon: Connecting Diamonds</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'gnuhealth-franceville-gabon.odp') }}">Gnu Health Implementation in Franceville 
- Gabon: Connecting Diamonds</a>,
             <em>Armand Mpassy-Nzoumba</em>,
             <a href="https://youtu.be/OwCBFqXwOkI";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/challenges-scaling-with-tryton.odp">A 
few challenges when scaling with Tryton</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'challenges-scaling-with-tryton.odp') }}">A few challenges when scaling with 
Tryton</a>,
             <em>Jérémy Mousset</em>,
             <a href="https://youtu.be/9w-1XUagZ2U";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/collect-payment-tryton-stripe.odp">Collect
 payment with Tryton and Stripe</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'collect-payment-tryton-stripe.odp') }}">Collect payment with Tryton and 
Stripe</a>,
             <em>Cédric Krier</em>,
             <a href="https://youtu.be/aQtlf0edENQ";>Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2017/tryton-based-web-stack.odp">A web 
application and an API based on Tryton</a>,
+            <a href="{{ url_for_downloads('TUL2017', 
'tryton-based-web-stack.odp') }}">A web application and an API based on 
Tryton</a>,
             <em>Ali Kefia</em>,
             <a href="https://youtu.be/uFajBwgB-60";>Video</a>
         </li>
@@ -308,89 +308,89 @@
     <h2 id="TUB2016">TUB2016</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/new_features_42.pdf">New features in 
4.2</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'new_features_42.pdf') 
}}">New features in 4.2</a>,
             <em>Cédric Krier</em>,
-            <a 
href="//videos.tryton.org/tub2016/new_features_in_42.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'new_features_in_42.html') 
}}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/billiard_balls_manufacture.pdf">Implementing
 Tryton in a billiard balls manufacture</a>,
+            <a href="{{ url_for_downloads('TUB2016', 
'billiard_balls_manufacture.pdf') }}">Implementing Tryton in a billiard balls 
manufacture</a>,
             <em>Maxime Richez &amp; Thierry Bruyere</em>,
-            <a 
href="//videos.tryton.org/tub2016/billiard_balls_manufacture.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 
'billiard_balls_manufacture.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/tub-2016-prez-bus.pdf">How we used 
tryton to build an Insurance ERP (part1)</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'tub-2016-prez-bus.pdf') 
}}">How we used tryton to build an Insurance ERP (part1)</a>,
             <em>Romain Séon &amp; Frédéric Langevin</em>,
-            <a 
href="//videos.tryton.org/tub2016/insurance_erp_1.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'insurance_erp_1.html') 
}}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/tub-2016-prez-bus.pdf">How we used 
tryton to build an Insurance ERP (part 2)</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'tub-2016-prez-bus.pdf') 
}}">How we used tryton to build an Insurance ERP (part 2)</a>,
             <em>Romain Séon &amp; Frédéric Langevin</em>,
-            <a 
href="//videos.tryton.org/tub2016/insurance_erp_2.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'insurance_erp_2.html') 
}}">Video</a>
         </li>
         <li>
             Advocate Tax,
             <em>Jonathan Levy</em>,
-            <a href="//videos.tryton.org/tub2016/advocate_tax.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'advocate_tax.html') 
}}">Video</a>
         </li>
         <li>
             Adore,
             <em>Udo Spallek</em>,
-            <a href="//videos.tryton.org/tub2016/adore.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'adore.html') }}">Video</a>
         </li>
         <li>
             SISalp,
             <em>Dominique Chabord</em>,
-            <a href="//videos.tryton.org/tub2016/sisalp.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'sisalp.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/distributed.pdf">Distributed 
Transactions</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'distributed.pdf') 
}}">Distributed Transactions</a>,
             <em>Nicolas Évrard</em>,
-            <a 
href="//videos.tryton.org/tub2016/distributed_transactions.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 
'distributed_transactions.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/user_application.pdf">User 
Application</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'user_application.pdf') 
}}">User Application</a>,
             <em>Cédric Krier</em>,
-            <a 
href="//videos.tryton.org/tub2016/user_application.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'user_application.html') 
}}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/tub-2016-prez-tech.pdf">How Tryton is 
customized to empower Coog</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'tub-2016-prez-tech.pdf') 
}}">How Tryton is customized to empower Coog</a>,
             <em>Jean Cavallo &amp; Ali Kefia</em>,
-            <a 
href="//videos.tryton.org/tub2016/how_trton_is_customized_to_empower_coog.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 
'how_trton_is_customized_to_empower_coog.html') }}">Video</a>
         </li>
         <li>
             Application Performance Monitoring,
             <em>Albert Cervera i Areny</em>,
-            <a 
href="//videos.tryton.org/tub2016/application_performance_monitoring.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 
'application_performance_monitoring.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/who_are_you.pdf">Tryton 
Authentication</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'who_are_you.pdf') 
}}">Tryton Authentication</a>,
             <em>Cédric Krier</em>,
-            <a 
href="//videos.tryton.org/tub2016/tryton_authentification.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 
'tryton_authentification.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/tryton-integration-drupal.pdf">Tryton 
integrates with Drupal</a>,
+            <a href="{{ url_for_downloads('TUB2016', 
'tryton-integration-drupal.pdf') }}">Tryton integrates with Drupal</a>,
             <em>Lucho Rossi</em>,
-            <a 
href="//videos.tryton.org/tub2016/tryton_with_drupal.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'tryton_with_drupal.html') 
}}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/developing-on-trunk">Why you should 
develop on trunk?</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'developing-on-trunk') 
}}">Why you should develop on trunk?</a>,
             <em>Sergi Almacellas Abellana</em>,
-            <a 
href="//videos.tryton.org/tub2016/why_you_should_develop_on_trunk.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 
'why_you_should_develop_on_trunk.html') }}">Video</a>
         </li>
         <li>
             Universal Business Language,
             <em>Dominique Chabord</em>,
-            <a href="//videos.tryton.org/tub2016/support_UBL.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'support_UBL.html') 
}}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2016/postgresql.pdf">PostgreSQL: present 
and near future</a>,
+            <a href="{{ url_for_downloads('TUB2016', 'postgresql.pdf') 
}}">PostgreSQL: present and near future</a>,
             <em>Albert Cervera i Areny</em>,
-            <a href="//videos.tryton.org/tub2016/postgresql.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 'postgresql.html') 
}}">Video</a>
         </li>
         <li>
             A Raft of Tryton Modules,
             <em>Albert Cervera i Areny</em>,
-            <a 
href="//videos.tryton.org/tub2016/a_raft_of_tryton_modules.html">Video</a>
+            <a href="{{ url_for_videos('tub2016', 
'a_raft_of_tryton_modules.html') }}">Video</a>
         </li>
     </ul>
 </section>
@@ -398,7 +398,7 @@
     <h2 id="jdl2016">Jeudi du Libre 2016</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/jeudidulibre2016/tryton-jdl.pdf">Tryton, un 
framework libre d'application métier</a>,
+            <a href="{{ url_for_downloads('jeudidulibre2016', 
'tryton-jdl.pdf') }}">Tryton, un framework libre d'application métier</a>,
             <em>Cédric Krier</em>
         </li>
     </ul>
@@ -407,73 +407,73 @@
     <h2 id="TUBA2015">TUBA2015</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/tryton-project.pdf">Tryton History 
from the very beginning</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 'tryton-project.pdf') 
}}">Tryton History from the very beginning</a>,
             <em>Nicolas Évrard</em>,
-            <a 
href="//videos.tryton.org/tuba2015/NicolasEvrard-TrytonHistoryFromTheVeryBeginning.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'NicolasEvrard-TrytonHistoryFromTheVeryBeginning.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/silex_why_we_have_chosen_tryton.pdf">Why
 we have chosen Tryton - from homemade proprietary ERPs to free software</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 
'silex_why_we_have_chosen_tryton.pdf') }}">Why we have chosen Tryton - from 
homemade proprietary ERPs to free software</a>,
             <em>Roberto Novaes</em>,
-            <a 
href="//videos.tryton.org/tuba2015/RobertoNovaes-WhyWeHaveChosenTryton.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'RobertoNovaes-WhyWeHaveChosenTryton.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/gcoop_tryton_in_argentina.pdf">Tryton 
in Argentina, our localization and use</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 
'gcoop_tryton_in_argentina.pdf') }}">Tryton in Argentina, our localization and 
use</a>,
             <em>Pablo Vannini</em>
         </li>
         <li>
             sao, Tryton in your browser,
             <em>Cédric Krier and Nicolas Évrard</em>,
-            <a 
href="//videos.tryton.org/tuba2015/CedricKrier-NicolasEvrard-SAO-TrytonInYourBrowser.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'CedricKrier-NicolasEvrard-SAO-TrytonInYourBrowser.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/gnusolidario_gnuhealth_new_features.pdf">New
 features in GNU Health 3.0</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 
'gnusolidario_gnuhealth_new_features.pdf') }}">New features in GNU Health 
3.0</a>,
             <em>Luis Falcón</em>,
-            <a 
href="//videos.tryton.org/tuba2015/LuisFalcon-NewFeaturesInGNUHealth3.0.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'LuisFalcon-NewFeaturesInGNUHealth3.0.html') }}">Video</a>
         </li>
         <li>
             Tryton Implementations, our experience without programmers,
             <em>Agustin Montagna</em>,
-            <a 
href="//videos.tryton.org/tuba2015/AgustinMontagna-TrytonImplementations-OurExperienceWithoutProgrammers.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'AgustinMontagna-TrytonImplementations-OurExperienceWithoutProgrammers.html') 
}}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/axel_braun_building_packages_for_tryton.pdf">Building
 packages for Tryton</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 
'axel_braun_building_packages_for_tryton.pdf') }}">Building packages for 
Tryton</a>,
             <em>Axel Braun</em>,
-            <a 
href="//videos.tryton.org/tuba2015/AxelBraun-BuildingPackagesForTryton.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'AxelBraun-BuildingPackagesForTryton.html') }}">Video</a>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUBA2015/mr_robot/">Mr 
Robot</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 'mr_robot') }}">Mr 
Robot</a>,
             <em>Cédric Krier</em>,
-            <a 
href="//videos.tryton.org/tuba2015/CedricKrier-MrRobot.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 'CedricKrier-MrRobot.html') 
}}">Video</a>
         </li>
         <li>
             A newbie introduction to proteus,
             <em>Nicolas Évrard</em>,
-            <a 
href="//videos.tryton.org/tuba2015/NicolasEvrard-ANewbieIntroductionToProteus.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'NicolasEvrard-ANewbieIntroductionToProteus.html') }}">Video</a>
         </li>
         <li>
             typi: The Tryton Package Index,
             <em>Nicolas Èvrard</em>,
-            <a 
href="//videos.tryton.org/tuba2015/NicolasEvrard-TypiTheTrytonPackageIndex.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'NicolasEvrard-TypiTheTrytonPackageIndex.html') }}">Video</a>
         </li>
         <li>
             Nahual Inclusion Technology,
             <em>Cesar Tynik</em>,
-            <a 
href="//videos.tryton.org/tuba2015/CesarTynik-NahualInclusionTechnology.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'CesarTynik-NahualInclusionTechnology.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/axel_braun_building_live_cd_for_tryton.pdf">Running
 Tryton from a CD - and how to adapt a live system</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 
'axel_braun_building_live_cd_for_tryton.pdf') }}">Running Tryton from a CD - 
and how to adapt a live system</a>,
             <em>Axel Braun</em>,
-            <a 
href="//videos.tryton.org/tuba2015/AxelBraun-RunningTrytonFromACD-andHowToAdaptALiveSystem.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'AxelBraun-RunningTrytonFromACD-andHowToAdaptALiveSystem.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/design_pattern/">Design Patterns in 
Tryton</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 'design_pattern') 
}}">Design Patterns in Tryton</a>,
             <em>Cédric Krier</em>,
-            <a 
href="//videos.tryton.org/tuba2015/CedricKrier-DesignPatternsInTryton.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'CedricKrier-DesignPatternsInTryton.html') }}">Video</a>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUBA2015/thymbra_occhiolino.pdf">Integrating 
Tryton + Occhiolino in Food Testing Laboratory</a>,
+            <a href="{{ url_for_downloads('TUBA2015', 
'thymbra_occhiolino.pdf') }}">Integrating Tryton + Occhiolino in Food Testing 
Laboratory</a>,
             <em>Sebastián Marró and Favio Dutria</em>,
-            <a 
href="//videos.tryton.org/tuba2015/SebastianMarro-FavioDutria-IntegratingTryton+OcchiolinoInFoodTestingLaboratory.html">Video</a>
+            <a href="{{ url_for_videos('tuba2015', 
'SebastianMarro-FavioDutria-IntegratingTryton+OcchiolinoInFoodTestingLaboratory.html')
 }}">Video</a>
         </li>
     </ul>
 </section>
@@ -481,51 +481,51 @@
     <h2 id="TUL2014">TUL2014</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/tryton_34_and_future/">Tryton 3.4 and 
future</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'tryton_34_and_future') 
}}">Tryton 3.4 and future</a>,
             <em>Cédric Krier</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/TUL2014_OBS_und_SUSEStudio.odp">Building
 Distribution packages with Open Build Service</a>,
+            <a href="{{ url_for_downloads('TUL2014', 
'TUL2014_OBS_und_SUSEStudio.odp') }}">Building Distribution packages with Open 
Build Service</a>,
             <em>Axel Braun</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/Docker%20Tryton.pdf">Dockerized Tryton 
Deployments</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'Docker Tryton.pdf') 
}}">Dockerized Tryton Deployments</a>,
             <em>Prakash Pandey</em> &amp; <em>Sharoon Thomas</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/WSGI_Deployment.pdf">Tryton WSGI 
Deployment: A field report</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'WSGI_Deployment.pdf') 
}}">Tryton WSGI Deployment: A field report</a>,
             <em>Robin Baumgartner</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/occhiolino_english_tul_2014.pdf">Occhiolino:
 The GNU LIMS (Laboratory Information Management System)</a>,
+            <a href="{{ url_for_downloads('TUL2014', 
'occhiolino_english_tul_2014.pdf') }}">Occhiolino: The GNU LIMS (Laboratory 
Information Management System)</a>,
             <em>Sebastián Marró</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/doc-and-babi.pdf">Documentation and 
BAsic Business Intelligence updates</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'doc-and-babi.pdf') 
}}">Documentation and BAsic Business Intelligence updates</a>,
             <em>Albert Cervera i Areny</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/Open%20source%20projects%20need%20more%20than%20good%20code.pdf">Open-Source
 Projects Need More Than Good Code</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'Open source projects 
need more than good code.pdf') }}">Open-Source Projects Need More Than Good 
Code</a>,
             <em>Varun Kumar</em> &amp; <em>Sharoon Thomas</em>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUL2014/html_webkit.pdf">The 
HTML/Webkit report engine</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'html_webkit.pdf') 
}}">The HTML/Webkit report engine</a>,
             <em>Umang Arora</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/Features%20in%20GNU%20Health%2028.pdf">New
 features in GNU Health 2.8</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'Features in GNU Health 
28.pdf') }}">New features in GNU Health 2.8</a>,
             <em>Luis Falcón</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/synchronise_engine/">Synchronise 
engine: The case study of Jamaica health records</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'synchronise_engine') 
}}">Synchronise engine: The case study of Jamaica health records</a>,
             <em>Cédric Krier</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/flask_tryton/">Flask-Tryton: Tailored 
web app</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'flask_tryton') 
}}">Flask-Tryton: Tailored web app</a>,
             <em>Cédric Krier</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2014/crash-course.pdf">Writing your first 
module for tryton</a>,
+            <a href="{{ url_for_downloads('TUL2014', 'crash-course.pdf') 
}}">Writing your first module for tryton</a>,
             <em>Nicolas Évrard</em>
         </li>
     </ul>
@@ -534,129 +534,129 @@
     <h2 id="TUB2013">TUB2013</h2>
     <ul>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUB2013/no_localization/">Why 
you should not do localization modules?</a>,
+            <a href="{{ url_for_downloads('TUB2013', 'no_localization') 
}}">Why you should not do localization modules?</a>,
             <em>Cédric Krier</em>,
-            <a 
href="//videos.tryton.org/tub2013/WhyYouShouldNotDoLocalizationModules.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/WhyYouShouldNotDoLocalizationModules_small.html">small
 size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'WhyYouShouldNotDoLocalizationModules.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'WhyYouShouldNotDoLocalizationModules_small.html') }}">small size</a>)
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUB2013/release_module/">How 
to release module</a>,
+            <a href="{{ url_for_downloads('TUB2013', 'release_module') }}">How 
to release module</a>,
             <em>Cédric Krier</em>,
-            <a 
href="//videos.tryton.org/tub2013/HowToReleaseModule.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/HowToReleaseModule_small.html">small size</a>)
+            <a href="{{ url_for_videos('tub2013', 'HowToReleaseModule.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'HowToReleaseModule_small.html') }}">small size</a>)
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2013/TeleTryton_for_dumbs.pdf">TéléTryton</a>,
+            <a href="{{ url_for_downloads('TUB2013', 
'TeleTryton_for_dumbs.pdf') }}">TéléTryton</a>,
             <em>Dominique Chabord</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2013/cooperatives-and-free-software.pdf">Cooperatives
 and Free Software, Our experience with Tryton</a>,
+            <a href="{{ url_for_downloads('TUB2013', 
'cooperatives-and-free-software.pdf') }}">Cooperatives and Free Software, Our 
experience with Tryton</a>,
             <em>Pablo Vannini</em>,
-            <a 
href="//videos.tryton.org/tub2013/CooperativesAndFreeSoftware_OurExperienceWithTryton.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/CooperativesAndFreeSoftware_OurExperienceWithTryton_small.html">small
 size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'CooperativesAndFreeSoftware_OurExperienceWithTryton.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'CooperativesAndFreeSoftware_OurExperienceWithTryton_small.html') }}">small 
size</a>)
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUB2013/pos.pdf">Point of 
Sale</a>,
+            <a href="{{ url_for_downloads('TUB2013', 'pos.pdf') }}">Point of 
Sale</a>,
             <em>Jordi Esteve</em>,
-            <a 
href="//videos.tryton.org/tub2013/TrytonPointOfSale.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/TrytonPointOfSale_small.html">small size</a>)
+            <a href="{{ url_for_videos('tub2013', 'TrytonPointOfSale.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'TrytonPointOfSale_small.html') }}">small size</a>)
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUB2013/proteus.pdf">A newbie 
introduction to proteus</a>,
+            <a href="{{ url_for_downloads('TUB2013', 'proteus.pdf') }}">A 
newbie introduction to proteus</a>,
             <em>Nicolas Évrard</em>,
-            <a 
href="//videos.tryton.org/tub2013/aNewbieIntroductionToProteus.html">Video</a>
+            <a href="{{ url_for_videos('tub2013', 
'aNewbieIntroductionToProteus.html') }}">Video</a>
             (<a 
href="//videos.tryton.org/tub2013/aNewbieIntroductionToProteus_small.html">small
 size</a>)
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2013/tryton-and-insurance.odp">Tryton and 
Insurance</a>,
+            <a href="{{ url_for_downloads('TUB2013', 
'tryton-and-insurance.odp') }}">Tryton and Insurance</a>,
             <em>Jean Cavallo</em>,
-            <a 
href="//videos.tryton.org/tub2013/TrytonAndInsuranceCoopengo.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/TrytonAndInsuranceCoopengo_small.html">small 
size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'TrytonAndInsuranceCoopengo.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'TrytonAndInsuranceCoopengo_small.html') }}">small size</a>)
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2013/tryton-from-user-perspective.odp">Tryton
 from a User-Perspective</a>,
+            <a href="{{ url_for_downloads('TUB2013', 
'tryton-from-user-perspective.odp') }}">Tryton from a User-Perspective</a>,
             <em>Axel Braun</em>,
-            <a 
href="//videos.tryton.org/tub2013/TrytonFromAUserPerspective.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/TrytonFromAUserPerspective_small.html">small 
size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'TrytonFromAUserPerspective.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'TrytonFromAUserPerspective_small.html') }}">small size</a>)
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUB2013/tryton-user-doc.pdf">Tryton User 
Documentation</a>,
+            <a href="{{ url_for_downloads('TUB2013', 'tryton-user-doc.pdf') 
}}">Tryton User Documentation</a>,
             <em>Guillem Barba Domingo</em>,
-            <a 
href="//videos.tryton.org/tub2013/TrytonUserDocumentation.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/TrytonUserDocumentation_small.html">small 
size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'TrytonUserDocumentation.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'TrytonUserDocumentation_small.html') }}">small size</a>)
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUB2013/gnu-health.pdf">GNU 
Health: Current status and next steps</a>,
+            <a href="{{ url_for_downloads('TUB2013', 'gnu-health.pdf') }}">GNU 
Health: Current status and next steps</a>,
             <em>Luis Falcón</em>,
-            <a 
href="//videos.tryton.org/tub2013/GNUHealth_CurrentStatus_NextSteps.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/GNUHealth_CurrentStatus_NextSteps_small.html">small
 size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'GNUHealth_CurrentStatus_NextSteps.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'GNUHealth_CurrentStatus_NextSteps_small.html') }}">small size</a>)
         </li>
         <li>
             Business Intelligence: Presentation of BABI,
             <em>Albert Cervera i Areny</em>,
-            <a href="//videos.tryton.org/tub2013/BABI.html">Video</a>
-            (<a href="//videos.tryton.org/tub2013/BABI_small.html">small 
size</a>)
+            <a href="{{ url_for_videos('tub2013', 'BABI.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 'BABI_small.html') 
}}">small size</a>)
         </li>
         <li>
             Showcase Of SAO,
             <em>Cédric Krier</em>,
-            <a href="//videos.tryton.org/tub2013/ShowcaseOfSAO.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/ShowcaseOfSAO_small.html">small size</a>)
+            <a href="{{ url_for_videos('tub2013', 'ShowcaseOfSAO.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 'ShowcaseOfSAO_small.html') 
}}">small size</a>)
         </li>
         <li>
             SAO patch from NaN,
             <em>Guillem Barba Domingo</em>,
-            <a href="//videos.tryton.org/tub2013/SAO_NaN.html">Video</a>
-            (<a href="//videos.tryton.org/tub2013/SAO_NaN_small.html">small 
size</a>)
+            <a href="{{ url_for_videos('tub2013', 'SAO_NaN.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 'SAO_NaN_small.html') 
}}">small size</a>)
         </li>
         <li>
             Roundtable About The Future Development,
-            <a 
href="//videos.tryton.org/tub2013/merged/9_RoundtableAboutTheFutureDevelopment.ogg">Audio</a>
+            <a href="{{ url_for_videos('tub2013', 'merged', 
'9_RoundtableAboutTheFutureDevelopment.ogg') }}">Audio</a>
         </li>
         <li>
             iOS client,
             <em>Sharoon Thomas</em>,
-            <a href="//videos.tryton.org/tub2013/iOS_client.html">Video</a>
-            (<a href="//videos.tryton.org/tub2013/iOS_client_small.html">small 
size</a>)
+            <a href="{{ url_for_videos('tub2013', 'iOS_client.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 'iOS_client_small.html') 
}}">small size</a>)
         </li>
         <li>
             Nereid Workshop,
             <em>Sharoon Thomas</em>,
-            <a href="//videos.tryton.org/tub2013/NereidWorkshop.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/NereidWorkshop_small.html">small size</a>)
+            <a href="{{ url_for_videos('tub2013', 'NereidWorkshop.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'NereidWorkshop_small.html') }}">small size</a>)
         </li>
         <li>
             Working In Distributed Environments, Synchronizing Instances And 
Models,
             <em>Sebastián Marró</em>,
-            <a 
href="//videos.tryton.org/tub2013/WorkingInDistributedEnvironments_SynchronizingInstancesAndModels.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/WorkingInDistributedEnvironments_SynchronizingInstancesAndModels_small.html">small
 size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'WorkingInDistributedEnvironments_SynchronizingInstancesAndModels.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'WorkingInDistributedEnvironments_SynchronizingInstancesAndModels_small.html') 
}}">small size</a>)
         </li>
         <li>
             Tryton Private Foundation Treasury,
-            <a 
href="//videos.tryton.org/tub2013/TrytonPrivateFoundationTreasury.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/TrytonPrivateFoundationTreasury_small.html">small
 size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'TrytonPrivateFoundationTreasury.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'TrytonPrivateFoundationTreasury_small.html') }}">small size</a>)
         </li>
         <li>
             Workshop summaries: BABI,
             <em>Albert Cervera i Areny</em>,
-            <a 
href="//videos.tryton.org/tub2013/WorkshopSummaryBABI.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/WorkshopSummaryBABI_small.html">small 
size</a>)</li>
+            <a href="{{ url_for_videos('tub2013', 'WorkshopSummaryBABI.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'WorkshopSummaryBABI_small.html') }}">small size</a>)</li>
         <li>
             Workshop summaries: Tryton Documentation,
             <em>Sharoon Thomas</em>,
-            <a 
href="//videos.tryton.org/tub2013/WorkshopSummaryTrytonDocumentation.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/WorkshopSummaryTrytonDocumentation_small.html">small
 size</a>)
+            <a href="{{ url_for_videos('tub2013', 
'WorkshopSummaryTrytonDocumentation.html') }}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'WorkshopSummaryTrytonDocumentation_small.html') }}">small size</a>)
         </li>
         <li>
             Tryton Magento,
-            <a href="//videos.tryton.org/tub2013/TrytonMagento.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/TrytonMagento_small.html">small size</a>)
+            <a href="{{ url_for_videos('tub2013', 'TrytonMagento.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 'TrytonMagento_small.html') 
}}">small size</a>)
         </li>
         <li>
             Nereid Extra Features,
             <em>Sharoon Thomas</em>,
-            <a 
href="//videos.tryton.org/tub2013/NereidExtraFeatures.html">Video</a>
-            (<a 
href="//videos.tryton.org/tub2013/NereidExtraFeatures_small.html">small 
size</a>)
+            <a href="{{ url_for_videos('tub2013', 'NereidExtraFeatures.html') 
}}">Video</a>
+            (<a href="{{ url_for_videos('tub2013', 
'NereidExtraFeatures_small.html') }}">small size</a>)
         </li>
     </ul>
 </section>
@@ -664,27 +664,27 @@
     <h2 id="TUL2012">TUL2012</h2>
     <ul>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUL2012/what_s_new/">What's 
new?</a>,
+            <a href="{{ url_for_downloads('TUL2012', 'what_s_new') }}">What's 
new?</a>,
             <em>Cédric Krier</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2012/domains_states_safe_eval/">Domains, 
states and safe-eval</a>,
+            <a href="{{ url_for_downloads('TUL2012', 
'domains_states_safe_eval') }}">Domains, states and safe-eval</a>,
             <em>Bertrand Chenal</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2012/GNU_Health_status.pdf">GNU Health 
status</a>,
+            <a href="{{ url_for_downloads('TUL2012', 'GNU_Health_status.pdf') 
}}">GNU Health status</a>,
             <em>Sebastián Marró</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2012/python3/python3.html">Python3 port: 
why and how far are we?</a>,
+            <a href="{{ url_for_downloads('TUL2012', 'python3', 
'python3.html') }}">Python3 port: why and how far are we?</a>,
             <em>Nicolas Évrard</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2012/GSoC%20-%20Calendar%20View.pdf">GSoC - 
calendar view for Tryton</a>,
+            <a href="{{ url_for_downloads('TUL2012', 'GSoC - Calendar 
View.pdf') }}">GSoC - calendar view for Tryton</a>,
             <em>Antoine Smolders</em>
         </li>
         <li>
-            <a href="//downloads-cdn.tryton.org/TUL2012/what_next/">What 
next?</a>,
+            <a href="{{ url_for_downloads('TUL2012', 'what_next') }}">What 
next?</a>,
             <em>Cédric Krier</em>
         </li>
     </ul>
@@ -693,15 +693,15 @@
     <h2 id="TUL2011">TUL2011</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2011/Tryton_vs_OpenERP/">Tryton vs 
OpenERP</a>,
+            <a href="{{ url_for_downloads('TUL2011', 'Tryton_vs_OpenERP') 
}}">Tryton vs OpenERP</a>,
             <em>Cédric Krier</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2011/GNUHealth/text0.html">GNU Health over 
Tryton</a>,
+            <a href="{{ url_for_downloads('TUL2011', 'GNUHealth/text0.html') 
}}">GNU Health over Tryton</a>,
             <em>Sebastián Marró</em>
         </li>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/TUL2011/mercurial.pdf">Mercurial 
Introduction</a>,
+            <a href="{{ url_for_downloads('TUL2011', 'mercurial.pdf') 
}}">Mercurial Introduction</a>,
             <em>Nicolas Évrard</em>
         </li>
     </ul>
@@ -710,7 +710,7 @@
     <h2 id="PyConFr2010">PyCONFR 2010</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/PyCONFR2010/slides.pdf">Tryton</a>,
+            <a href="{{ url_for_downloads('PyCONFR2010', 'slides.pdf') 
}}">Tryton</a>,
             <em>Cédric Krier &amp; Bertrand Chenal</em>
         </li>
     </ul>
@@ -719,7 +719,7 @@
     <h2 id="EUROPYTHON2010">EUROPYTHON 2010</h2>
     <ul>
         <li>
-            <a 
href="//downloads-cdn.tryton.org/europython2010/presentation.tar.gz">What is 
Tryton?</a>,
+            <a href="{{ url_for_downloads('europython2010', 
'presentation.tar.gz') }}">What is Tryton?</a>,
             <em>Sharoon Thomas</em>
         </li>
     </ul>

Reply via email to