继续学习flask

本部分Miguel Grinberg教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/templates.html

英文原文地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates

一、为什么使用模板?

以下做一个小小的扩展:输出一个大标题。

一个容易的选择就是改变我们的视图功能,输出 HTML。

修改app/views.py

 from app import app

 @app.route('/')
@app.route('/index')
def index():
user = { 'nickname': 'Miguel'} # fake user
return '''
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>hello,''' + user['nickname'] + '''</h1>
</body>
</html>
'''

网页浏览器上的显示情况:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWYAAACTCAIAAAAybCRfAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xu1dB1xTVxd/mUCAMMMeslSGICi4V1114d6rVq39rNZRF87WAe5ZZ13VquCoe6C4FfdAUZGNjDDDhuz33ZcEyMsOMkK9r/5oct+555z7v++dnHPuIoxwao0iqIBBz0BKCwoKvb09y8rKECVXJRkF/wC9voBA4xEJSsh0pZhAphIFXAFapQ+RSBAKq79poyXVOXh+cNGRvQ9y+NpU+0/QGhkZffjwycLCTP7xMKabPn4crbaVnTp1LC0pUkvWNAkIZD0KypV6yr6qGUQSERXU7hn9KrlaVCZX06LgQtS8TwZ8AvinBfvGJUX5XIG0BrW0F4AFN+3S+l2N25jGlA4eDIWPBzAEvq281Gr237UXoOkon8NVi4DGBEKBUGPaRiIkVssVCARUCrWR1IBidRoBCoUCHw+d7qEGVE5iMsBvSCWbTTOkYa4GvCACUgiAR8LQ0BA+HvChECOABSYg0iAiBPDX0sKCy+XyeDyIDkSgGgHwSIAHIyOjAj4e8KkACACTIfErXr9+CxGBCEAEIAKqEQCBiSidqfOjH6qbAe9CBCACDYMAUTxKIlQ3VtIw2kApEAGIgI4jALwLkZeh20PBOg4iVA8i8O0gIJmXIRp1hxdEACIAEVCDgCQwIWADJvCCCEAEIAJqEJAEJtBkqMEJ3oYIQARECNRMGG/cBGhuTnZiwufSkhIU1fkZs/DRgQh8wwiQseynJI3RaNkMYC8+xr7z9G5lZm5BJNbMYf+G+wU2HSKgowiQq+xFY76oSQnxnj6+Lq7uOgoSVAsiABGoQkAqMNEMFE5hdu6VHZVfPtGcWtkMW0g2pGtWTxVVSUmJmZm5Kgp4DyIAEdANBGqWpWmiD7c4N/3gPDNnc9dhg40YhKzwtZrUUksD8hcwHlGLEiSACOgCAhIvQ5MRE355SfqhBfbdupH1EQErg8awyHl8uwHaUFlZmZKSkpOTU15eDsSBVZXW1tYuLi4GBgYNIB2KgAhABKQRIFdtq6Nm+qegsixt3y82QQFUGpmTl0g2tilJSDT06VLfKdPMzMy3b9+am5ubmpra2Niw2WwTE5PY2Njk5OTWrVs7ODjA7oQIQAQaEgEymDCudjMulM/LOLKM4eupZ2LEzvpMNrGqSM/Ie/PZ5bfF9aprRkYGsA5BQUHAoUhMTExKSsL29aisFAqxQObVq1dAOrQa9doFkDlEQAYBMiqa9okFJkocBqFQkHEwxMha38DGhpPxnmRkwcnLz4yOcZm7T4/hoKzW1wNdUVHx+vXrzp07A7cCWAo3NzewKWlubm52djZgTiaTnZycgNUADgiNRlMiTlgef3blr7uLfz5zYIgVlrZBOZkPj/956OKT5CIBxbxF9/Fz543wMSbyvhyfMv5AGp6L39prf3YzxpXx8x4dDNt59gWTY+DYcdxvSya1MZMbadKEBmMqpxteOloedykiuqC6kOYdPLKdJQmr9+X1o2cfMksFFBPHVh26+Nnpi1cJaVmuBDJYDBFQjQAYZEXB1AylS0xQYebx1foGlaYe/py0d0IBT8Aq/BIZLeDxElaNxuqKtoXEDIfks+QDxZRh2mmg7ahZRBJ4zGtzAbeCTqcbGxsDn6K0tPTevXvgQzUjYD6AmQO7ywEyX19feQGC4vjbJ/fvO/k8D0GaV91Gy94e2Xm9suukpdNs0OTI/Qd3LUKanV4RZGjT7/e9rSslRpOXcTk0NMqmu5s+ni036fiCkBPlPWeunstIu7D90IKlxv/sGm6PG3TShAZRqJtME8CWknyCsfd33d0MMYtAINNMMSAFrJibUe94LoE92hsWf3r6+mYUdXh/L2OituXygMESiIBGCIgCE+wC++oqcDNY0ZeQ4kSLbj3Y6R8F5cWokEA2pjQb2AkjxjbfFYL/EFQI/gN/MUbgtUZRglAgqOTkRJ8GzO3GztZIETkikMUAaU6Q9WSxWKmpqXy+7N7eTCYzICDg06dPikwGL/Pqxl2PbUauXvxu7YbCKuYE46CQU6eJFBL2FnbxM3wfHfL+TTY/yJ1q6e5jKabiZ57bE1XYes6fQx0oOKUqYk+dSbYYsmfx2FYGCOpjmDRq0YmzCQPneOrVkGlCgyjWDa1MvXv+Xp5T7yGd7QFHlMfmEQwsrRmW0oaLlxv7sZDWckDnVtZAOSsK6/Stdx9YLdqbaFmOuSvwggjUBgE1IyYF98/Zt/OozIwTFOULuFwimcwrzBOtlMfMjNizEH0Ufxa5HOASosC5sPS0Y969UGuTASZrAE7p6ekgeSHfMjBu4u7uDnwQQCZ/F0EoTmMPXBpHJFQ8X4pbcEcgUareFkF5TiGPYudiLv36CIue7v0rljHy0Pc2Mm8VL+fth1J97y6uonEagrFXdw/CvbcfWAJP22pKTWiU6yYCrsqREnLLeQQiv6KMQzHUE5k4cAnKsnM5ZIazudiY6TFcLJDU7NwKPkm7cqGlsVxApQhFWAYRkENAZDJULGPl8cFYCcopFXI5wkoegSqQWAfMyxCtl5cyFtUWBLgbCJGE8onCmjNE5CRrUFBUVHP4BUheAEcDWAoQj4CoxNXVFfggIGDB9FF4EVRvNMZJu7B+X7LH5L+6mUu9PfzM6wcfCDqsGuUu5TqI2QtKsksQYxt6lZHVs7QxQl4xS/hIjcnQhEYEuALdCAYuPce7VDdFwCfok/MfXzj9GCEa2fu07xTgZEQEHcFB9Iz0qjQmGxjpIcxSDt9cu3IUwedoFAIICyECihAQvQDK3joEMe8xknl1j31nXwFaTEAEggoeydiYQMR+9cAvImYawD+hAAtPwCeQawDhiShU4bO5+R+Ylt0nKBKqURlIahYXFwNSMAUDZEDBATyfP38GQ61gGAVEPyQSCRiUvLw8YEQ0YidNhLKT/10xe2dmj9V7J+BsAzfp0tkk097zOkqbEa3Z10kFfaceI8eDZCenmJkI0p1RkcQhQwLqYKZtnSgHmXzDCACTIR4zUYyBRdehlRnJOc9uMvxc+WUVwFLwSnlZzz4KeSL/AUthYBWxXEbVV6xIiJDpppZ9xtlO+EUxXw1K7ezsCgsLwV8vLy/x3FCQs3j//r14QtfLly+trKzA6Am4qwEzKRKUnXIuZOauLGAvfuvGwEUfnKTrUbkW3Qe2UDRHjGRsTUdKs0skhymhnILscoRuW+V1iCRoQqOdtkQ9E3vvjh2yvkQlp5W09gUeBsIp4wCrLFKcX1nGRfSM9chaluNiNe0UgtTfOgKYlyF575VA4TB2ftr+koL3L83cGMIcpoGpoa23I/NDlvuyA4aeAUoq1UFxy5YtQWoT+BQgABFPvtDX1wdmAjgXYPwVeBnABwGmxNPTUxthaNmb3Qt2pXT6468FMvYCWMOMR0/y6YHfuciMlIj5U2z8vY2PvnyczA7y0UfQso/3E4SMft64TIgmNNpoK0tLMrK10nub9aWQb28Feo6Tn8pCae5WNLKW5TCRIYss/K4xAtjDA8Y1sEBD2T8CwXHacj7VvjQ5l2RkJmAyDWhEC0eTxNBfK5lpSmsp46aoXKG2IOLo2LEjiEE+fvwoGofBLnt7e5DRAEbE0tISpEUBgXaBiYAZueciy2tUPxtWIohzwJWQms8RZ0OERXEvs4iu7ZvVWAwh696K4O7D178oBSQ0n7EjXQr+XbP57MPn90+Grb/D9hk33ENPaxqFrQWwVKbeOXk04lEmBxAIS5PevI1LSc/Kykj5+Oz2g3SBmVszOhGhWPl4mVV8uh/9MS0z9d2jhyl8K18vYLW0LVeiAyyGCKhFQGpSgZI0ImZTSJRmC3ckhf5MysszptKEzDxzUxNuQRnzzEGX2WvUyqg1AchxAjPxUHTZ2tqCWRggEgE5DnAYD4hZunTpAgi0Y85Of5ECTmrdO296dT3GqIOnZrcA2U5ublw2YtrN1gDntovSvWJiqtvEzWHs0B17l0Zy9R06/rh58VAHsmiUWTsaFSpXyUJ5FYVpH969rgBhENmQ4dSmb1ArMywWIZn79enFf/j0xe1EAZnu6N+nc0tgSbQvV6EDvAURUIUAAZz8Dp55gZXxsTtXVRGCwLmsKGHpDwyTCgOUS+TwKlFSRg7B9/h91bU0uXvz+pVeffvTTUwVEoPxEeBofPnyRTyeCuZ3gXmfIIUBEqIK6WEhRAAiUH8ISLwMpUOVUpLJRqZuK/clLplsQxfq6ZEL00r0m7evP82qOQPTAJaZgKsBZEEREAGIgGoEJIkwDVPoVEsbt3WHC0xaJaQJhV5dXOeHqeau4V0w1UJ6MriGtSAZRAAi0PAIYIOsqkdMZHTSs7b3WLW7bhU1ppsUFrJM4cZcdQsr5AYRqAcEgJcBPAwNnYx6kC9i6ebuEfchNiebCX2N+oIY8oUI1BECUiMmdcSxFmwYVtag1vuY16JDCZSP3NSCNawCEYAI1CkCYL8MUVyCNvLsHmA1xIajTlsHmUEEIAJ1jIDEUqiaNF7HEiE7iABEoAkjQCZI3AzxutQm3BKoOkQAItAACFRvFwxkwSRCAwAORUAEmjYCCjZuaNoNgtpDBCAC9YkAUexaaHKOSX2qAXlDBCACTQMBosRYwKHNptFfUEuIQCMjQJRkMKDJaOSOgOIhAk0DATDIis3KAFtmNA19oZYQAYhAoyJAFm0VTIBDrI3aC1A4RKDJIECWRCRw5KTJdBlUFCLQmAhULX5XcS5BY6oHZUMEIAK6hQC2khVO4dKtPoHaQAR0GAEitlmwDusHVYMIQAR0CgGixMdo7JWsOgUKVAYiABFQhsA3tZJVUMEqqpQcXaQMEFgOEYAIqEJAvCxNcWjCur6JdW0DIqw5cp0WEGw39ZgqfuJ7KPvLs/uZTt91sJM6PJ2X+/zGY37QoI7Wcvv6CEri7t5heffvaEtVz7x2FMLSuKt7tl/i9Fu6ONhFT3GDa8dZSa2UlOQbN25kZmasWxe2bFkIoJo0aTL4e+zY3+CvuNDe3uH77793cXFVwgMWK0dAUBRz/VqSff/B/qYyB24rrwPv1AEC4O0Fr4/iBCiwF/ajV0oLyYz4XSOZaCXz+YU/z7AYoWPcq19PIrH01cXTWS0DZnjKHkdGJBOLXh3eyrFZO7Bg04xtn2SFuE7/c013U9F7zks+Nm95ZBGJTJZ97VE+X2Dad/W2yW5SdgqrIihLeXzm8N+3krFDhSKWT40QsyeZdwvZNMNT7rxmWeG1/B4RHj56zFh3dw+hUBAWthFwEW9TWPUZK0xMTIgIP7UkZGktZYiroeycuI/ZRi19HWkSTORLuIl/L1n30mvRxmmeik6P/Cr5iLw4zfnVuq4g98XVa5/6dAv2V3yWheYqQEqtECADi6F0sjg4nxlBkp9cFHN07TAYPPWJcxiyAghE0+9+sQyWMi5Es6AfprVb8Oc/j3uv6GFSzswqwI4RRS19bMpvRT2P13ekIASysY2DpT4B4WZERTw27jd04TKvPDqB5rLk8FHsUOiqS5h3c9XypziRRLJdtyFdbWR9FX7+08tvcITC8tQXUZE3bt2PLzIK+nn9PG9jySvFzbi5c/MdKz8bGeMi27Kv+V5Wjh1PD+wFYCL+K+ZW/Rl8AASATEYKys54euHslccxKSweglBNHJq37T1mXM9m+COZpCpxU85s3ZoWvCnMkSbBRL6EYGAJjrdl0L7uBxktT7x5/MS1Z/EFwPpSTR08u4z+aaS/GV9OAc2Bk1dV87qQsjEQwKZyKV3GKp7fBaZsVBkV+7GrJUqCQ9+xiebgG0FIQHLOhuJMBiilt56yYi1qa0kSZEf/FRaeXMblIwQKhULIORz2GqtGb79w4wwvPURQEHPvkVXnoe1cvMQHm1NxwYmAQpLkW2rgIVJoYFNy2RiGX0GVoSQQ+PlFRh2mLAh8cCj89M2eYVN9DBFO5tOI/QcfGQ4P+amdmRzruusD4ERIWwpljAGZQFAT+oGzXv9ZHXo909K374gZLRjUikLml/j0CgJJ1qdSxk9JOcV+wIJ1A5Tc1LBYWPj0z3XH31l0HDm9raMxWpKVkCw0xoxQjfoacoJkTRgB4N6DvT+VHSNCQAU88BMptg1fIg+QWBkybRUwXJx6/YDyMJ9ffAnLEp88SSoTIgR9h0A7e4Rk8/2qfT3Tzy1a+Xn87qVtaUrBQrlFzOxSfvW7gVJMba1FpwdKXyiRqo+mXT9yQBEfsm1zaXoCzX3AZHeMsLW7Z0KBMD7q5N2bUe/YXoPnrB/kay7rpijiWPuykJBFIGGhtj4gW7s2VEKGVsZF7L6eaT/k999HelR7FX1rmPDyX5w7cupWTDabaOzcbsiPP3zvbigGLDN84aRwjNBz7v4VvtgHXElr1umFIfcDVm+b5EoVFEQf2X32VWp2CReYbiPHtoN+nDqwuRHGR1D0/urxU9dfpJYIERLN0qHldzNmD3GW+GK87DcJXONu06cOwc6jRJA27XrUaIYXF6jHvLE1NOJdAZBAtfTuPennUQEWAG9B4euIg6efxH1hgQfG0Gd66OIOcqoGGiJKmolysx6fPBxxP66ASzZzdiGVIvXoJUo1DX6URkD02iibzCUUZF/YDE45F1egmFg1W3WDqC/2BbAyIbs0bf/MzPDfpbMhQk5Banx8XnHK6zR3h/beopNEEZRfwUc5OSmJiZLUAdHAytGejutxXtq/q3+/UyLOUmCJCZsRG9cPsxELFzFh56VlFvPb/rSibU2h7CdBWlKaib0TA4Q8vMLEdx/SmMzMtNTkxLjEHDbdNbBd9/nb+/qYKrMWubm5e/bu4/FARFBzAd9o5v9+BofOy8qq8++Vn689KtYPnD7AXVEUglZ8+mfNtkeM4KnL2pqXxvz71/ENR2y2/eIvQtGy7/x5PRgkBEQgkmSFfIlEX2FFRmx8ocPIXwe6GnCyXp4/dWrT307bZ/rRuImn14Zd4QQM+2lkC1NhbvTRQ4/jQHBUZTJIpk6WSPS7e29zXYKsqLJuD14cwcSr98S5weaGaP77y4fO7jrksWNhIJ0Afk+ex2RbD589vQVdWIk6mZCQXFnllTXTsPzd4bV7HtE6jZnV2ZGc/+nuuTRoMur8EVTPEIyYYBeRKPtrDgoJZGrzP24jqCS1UJEWkxWxqjz5nb6dM615K6qFDdWyebNZBwkkvbiQjtWiyBbtxv/SjpsWvngDq7pQWM4q46Ve2rcLe9KAO8EqdZi0bW1f8IjjLhK94/LtM0G0gpQ9Xz37NP4mwst7fuFo5IvkYktXN3MKYJOfkFJq4+5Cx3MhmgRM/t9AJyqCFr8KP/YQtXNxa95maJ8pXoy863v3RJw0cl/Q21ZsKsn6RjTcsw/sQvCgQZGRkS6urgATkLBMSU7u27dvLexFLQITflEak4vY+jopMhgIWvL23L1ir+m/j+5oBlB0mVb4Yl7E3WS2fwsMJz0zW0dHcbMQROTz4UpwNhC7S3NsFeDnSkVaeTLy3i5/9CSd62sXczYymzFo7a/Dm4GgT8jKP488lu4Csk2f2dO+bD2ya+4zO79uPfv26eZnCyyz5MKJA/yd/IOcsFvuzsYZD5fcfp/LC6SLY0lDJ782vkC06JJTFS1W3MzWjm8vPCpxHLNixkBRMz3pKfdj5BLlEmXg/+oPAdGro3jARCQUFRa/x0YYuHlZ5Z8/OU7aTnPtWJEcnf73HKQlZkq4+fEmvmNBOkSlisLyvAKB9eAVG4Y5gJ9Ezuf9v679QtE6PKc6Dpg1i7B0wXWH1m3Bz7Cw9CMzgz12ztjs8zfTq18JinP/if2AvQAXtdnoTQdGY43gsT7ePLFu07McrKXn/5h9XqKt/ditoQNk8qgBAf4JiQkZGZlWVozc3DxXN1dQorJ1im8+fRodFNRO8T2pUkAWGFh13KzofAiQWpJCk5t6+vewVz6L14xzyIvP4vOL9s4ev7emPpnFUdF7aqUDAoqpsxlyk1Uh4OV+SufR/QPsZJNE1VwIVPseMzd3HBX37P7tW+c33jztPnjBopGeik7T5uU8O3vsfHQcs5BNpFG4CKU5X0M9eUqayTVIyEZNg1paKvMQNWkspPl6BDD8sQcUVTPDqSL+vcPEnawnJ5M2BZt1HgN8hMx/fqUy7EQaYM+5SlU4zPfZZEfMNRBdfA4foejLjZJinIR8LpcLmPH40sMmOOZEiokFw8qIKNRLpxLYCMnQ3JhBtbGmEdHS92eOvyT1nFBDLqzIjLkfeenSnc+EVkPnbx/sbyl2KvisJ3tXHC7q1UbhAzhs6NCdu3YBq0GlUMBnlU1TevPixQuamAxAVm0ySCYODDKS/Dmb08OsahyaIGSXlJZUYhlGLONsEPi/paNcql9qgp4ZGAViKlVCkxskkF8WJ7MFAoREVremmaBn6dl1uGeXAQMurF52dv+ldhvHSQWPYoG89Isbd14j9pjy6zQ3UyTr1o7dzzTRREyjrJlZojy80uE9zQVAyq9CADwgqt92CXc2M83QrUvho3B6APbXwCkQlEjuKbcYKLcwp5iHln669Z7v3tFFEmTzKkq5JAMDirxgQenT9T//+MOUH3+YtSceZM4UXvzc6IunT4WHR1x6VQBGYQho0Yf7b3iuga0tsj+VewwJdq2eaSEser5vzc7bBVYt7cnlBYUVYleEX/Lp8taVR3K6zp/XW26kViQRJC8mTpggEAgmTpwAPivUoj4KCYYevfz1y56cuZspF0gArSw9bAmVqRkEhn31ZWcJRiwIZBoFYZdxa4ysfIkG6pItXBlIYdxnAKoGF0HfvrW3BcJKZYE+kFWAk/WJibgNGtHDz93Z2cXNXpEfIpEhV1dZMymMFvbk4vdvQOgGr8ZEAHgZmMOo1mnUd3Yv+3zboue0gvtHLXr8yCvMIhmZYIOv4i16FNkdkN+O2rYsgTFuDCn8hV7nFX6SWRH8kiyWkOZpKDtFgOo+aefh8VKaEEhUMiLvbFDdx69cFkQsykm8sWXbi+fPSsfMGPz+jxULL6HltuNCe0rNLSWatpuzK5BIISGc4Pun7yD8grgH969djIyn9/hxzdwga7kUXk1PgOTFvLlzDA0Na905tchlgJFn/4k/BMXtO758ZdLAPoGulgZocfyXCrEOBFP/od3Nwi5v2U4c3tOLQanMyyx16NrD3VD0MkXdO3vDvY8zWlBs2raLh1yJi/p2EM0CggNp28J3HKWO7GBPyH59PwNBWkrV4yT9e+AWz8PbzcaEKizNeHn1VgHBdSCIY+QUaG/tbolcv3b+rkmnZnRiQY6kBYp0kKvbxUNJM+n+o/pYr7q4YatwVG8fK2rFZyZbEUNYVs8IaBoYGnr4ph+d6zBho03wSn5RDirgG9h6Fb+4bxLUHTM4crkMor4ZnZsaRxsWrH/tQBS1T8iolnr8vE8fsxF9dswTJmLZXz4kAOlWPZw+YIgkIyc9qwwVJ2f5WTc2hZ3N4HL3zZqyX8/EwhTJR9HKMlZWZimZymOVElHOg7MX9bp1CPC0kxgkAhEtz0lKSUyIi8/+8GbpDcS1U7/x637xt6tJ2ykF+GvsBWBam0FWBCFZdJ613iLq7PlbN49Gl4FokUQzt/Fu08IUpKcJhq0mr/rN5NiZ20e2XAQxhLFThwlB3dwNSaaBP07psuNE+PY3CNm81SiPDs3tZUs0MBnAYLWdsXTKsb8vh2+9w6ZYOlsDDxRsJ10FECog0mmFUZcOXy7Cfuj1LT3aj106thdmouUU6D9k3qSivy78vSEKC3ipRlbNbSWDwbJwE+TqNrdX0kx9jzErltJPnLpxdMtl4AlRjK2bt3MwVJC3l5UBv9clAoThTn6An4BhdOzOVRnGSXOsWqy+I05/YjTlJRVJHziZKQSqAdnIxm3hjdRdI4T8IsfJuz6v/M5tZx6+OsouKODxY/euvcmYvHBiWzMyUhGza9Gmp0VCxNB9wOyFY33EXkdlzJZZB62Wb5lYE6FXMeLn3Fj52z+pNO9Jfyz83pYMRlrSM0spJqbmJkZ6JIIgL3LZ4pfBCzyuHk1p2X/k0M72pTE3r9x8+NFg+Ko57Uy5SRGhW68lFvPA1APbFj5+rdu0DWrb0qohlpeI9N+4Yf3QYcObN28ug6r01/j4+PP/nlu0eIkKmsa6xQNTaZbc9f1j6xR3pfnQxtINym1EBAgjnP1ALCCwpB+7c1lGD8xkrLkHMqNSKSdJ3JBzeTu/hEU1d+Qw4xwmb4xf3cdth4zJkDBDhSj4qWqMFnLzYt8z9W2dnWxNVEQg9aYZWD9y9swZMB9cxbI0I0OjESNHgnUo9aaFVoy5WY+iPhBtbMyNiOVfnl84cauox++bJzWvzg1pxQwS/0cRkJgMlGF89PYVmTYm/mIKYgWsEBv2E7321W4qVgC255HMJReyy9x3F/1HIapls7CxUiJmLEEalUTCEjfiZWniKTDiQmCAUSHYqlltKqmWOmhXTVj8+siWI0/SCsAGAUQju1Zdhk0c1cFWQZZaO7aQ+r+FgMhkgOkAVgpMxn+rpbA1EAGIQB0gAHJXmAOhKz90ddAiyAIiABGoRwRgvrkewYWsIQL/PQTE55igSte///daDFsEEYAIfAUCwMvQjdzbV7QBVoUIQAQaDAEspS83D6vBpENBEAGIQBNDQJTLACMmOjLO18TQg+pCBL45BLC9P8FFJBDDI2T3p/jmwIANhghABNQhIFnTAfyM6dOnqyOG9yECEIFvHQFNF79/6zjB9kMEIAIiBIgwiwGfBIgAREBzBESzP+Ewq+aAQUqIwLeNAJz9+W33P2w9REBLBKDJ0BIwSA4R+LYRkNp16dsGArYeIgAR0AQBkP7UhAzSQAQgAhABDAHJGhOweyfEAyIAEYAIqEUA24VWtDINOhtqsYIEEAGIgMTLgC4GfBQgAhABjRAQexkakUIiiABEACIgHmQFUQkcbYUPA0QAIqAeAbCSlYClMYQwl6EeLEgBEYAIYM4FsBlqN/Irvvo9Bdtmv/LzcSUAAA9USURBVPoyHHartOHhU6uGWoKG17k+JH4jzRRD9001tj6elrrliR36DTjCxWl1C6sg82AgzsJWfWnx+weOUlFowaVhxoqqWf0UreJYU6X84A2IQN0jIElhiM/jqXv2kKMMAvF7tj5R5p3x0yJCL5RByCACOo2A5OxD6GU0VC/lnVx/NVv+OHsgnh27f/MzmFJqqI6AcmqJAFn0jKLgmL9aMoDVtESAHbn+n6ThCzwo+Hpo0YNN+1M05aXXLHjmVPuyagNDNOngCA9b1hQ9SPc1CIg38sNOD/0aLrCuNgjEbP/z9cwd7WjSdQSZ59edLtSYi773zB0HNaaGhBCBukPgaw9lFxS+jVg3tZe3HZ2M5e2oFh5dxq04FVOszmnh5r46u2Xe2F4BrgwaWE0rugwY7kEDpq468uBLZUP45yg788nJsFkju/s5WxhUJR31zZ18u434JfSf6Ax2vSmReXhDVAGOOzfu8IYHfM27VeNBBLTs84UNM773taeLBryoFm4dRiz4KzoXyBKk72tT1Wzx/61nPJHOsrJjQlzwBJ5hn7l4JeVp/HakKGuIDnS65hBDSmUIjHTyH+HUemjbriCdoeIqutJXsrOwhBFtaCSLeWNpV1OFjG2GH0pgK2FXmXIhpKeNwmpVhRZdF15IVVRfgRo3S6TlqCUQEQvL407N6WSuUgfErOOcU5/LsXPZtb/4GX+1leFu4izlVhDa703l1bAtuTeVIUVu5mSAr8yY/rgcp4RGzRSWvN42QDHQtMB5F1MT9wbgxYCBGWkxlW+XNMMTtAyN4+LBkKfx3Z4s1bIq6nrtdO37B9aoPQK1jkf4OVdnd/4+9EGRwvcu+9zUIWExlXL30OJn63p7Dwm7nS13S7qg4MGmIb6DdsRW1McPvZB1f1nXVmN3PGap1AEpjN4x1qfr8oeF6jwm1WwkdyltZv/qXU2JPt20/wNb8lWYfTXsRF71PeNBIcMdNeKpkqgydtugTvOuKga64sW2wd3n3qgRqpJV9c3aHZKlC52uWfsglQYIiEwGmACq9bYZ3OidJ5JUCfiwacWNfPwrz08/ManP8keyUwzozt7+/t5OhnhuJbfm9v31ZkGdvK9SnHmph8b0D3vFU6V6zT3eq9B+Y4+mKfO0NWMiptJrPnlJz5oUZfL+zQ+LRfDwEo+HRVaZDwRxmLroO4uvXidY+SZ05G/35W22lMapVy6ma9MAjLYWNkMXOl3bZkJ6FQhIvAwQsqogUn5L32/C6kP/Xr92du9vPaVda6xGRdSRZ8VSVYUFNxbMulQizYzkOzviY0lhauzr17FpRXnRm7/HxTlZh2aEvZI1MMqV0eCOMPfy3Pm3ZFha9l566klyfmlZQcrT8KW9LPB8yiPn/XY1vw4sF8l2UMiYGuasiLCLTAGClL/atf1djUj/+b/4yxhPDdolQyJgnl+8KU6mkN5l/tH7cVl5OSmvLm4c5ao9V2AxtE596UKn16alsI5yBEY6tcZyGQFdVAc3csEz4KjffVdcZXU19sewVjJiXJe9q0lI8L8caI+3S7T+JzL5OLFC1vXx+AwDfdSNIikSOTVoQ7XJZfBS9wTK6EjusC0OlzWp/Lg5SDZca3/gC15R1WChqHwug9LvajHKfrfcXUq+17qPlXnnB0tZCIN+EdkCzqe1LfBaapnLAFC3k+1x3zVvpfMUfOaZEXJpKLW5DJ/NCdrlMhqm09X1Brxflwh8hZfRYtnun1roVz+aeq4Dh7jhH1RWakF1AICyok++wMUpJoPnD7Ij4WoQzNqPaYebX1By92xsnfkZQIfwV3gVzcetm9pCT7pM33P6ujEyb9OL8KeFdZFW0fOavqhTTZM/7tpy5uC6i+XV4q0nhvS3lrVXsi+/+u8lb/59g6cyHh72i6/0qC7JJnjNwpbqWeEpgJehlTeqC52ubRshvRoEiLV+E9xHD3HDvd0U82YyPj2vklfNnp32NBG44VJX8aledPwYHvhmNug6fhgv7+1HFr6emhapuM1Oe5aEjzDIAYP9jGRrGPsF++HfW0Hi83TlS0Nk66v4TnIcHjKMXk2QfWhSyMsacs9Zc9vJaaOCm5JbXObbJJmxUN+hbUxkXnaqc8+etko4KCvWNjDRhU5X1hZYXksERMEpQf1KVjn2RCd/B9yvM0KgGspMQJTOqfKLMhQPrshxlikoZpbUlcngF2dKJ1eAIFNnaz25300CzcbJBK9FcVZxXaRAAdTm3y2apng8hNJj8ZTmdTGFk1/CxGWMEITuZGco57xQGO6W6sBXf19l3lwXOl19EyCFVggQUdFhaQJU2/yePp2GDypAbows91hqpYtiYgFXUGtPSDHHxi018Jv5WxsFKpiPDhkiE6cpoNKsSC58UIigyrddoSABT3ZfFWFlscphGYVs1Bf+1zpdfYubDkXVye/aPz5yj6XqTcrJJvbgl1t6nSa92y9zejBk7I4ccmTrHjb4SWRyJBoXyOtQlJbDQRFDvKOBVuaky3gjJnYmdaUEQnEZGzJw6Ygr+BSN64wFXWRjB40bhick021B7CM9IaMkgwmmuBjhm8nNS1A9L0PO/UI4ZRz8T4uwNOl9jnI15QFv+E5Xrh28UysEyMDHAC9//S9+13du50ZEMqWeOL5Jn7krg83lH8xaNUSTSvrOQbI6vLn0rmxYd2Nc7dKYSzH4N4PkHuSIj8I0EaeMhmjVd8kkmyv7pF5qQvuFM7xrUsnKampWTrVt7aaHxEsnX95fjikZ1xsXbXFTb6qZUEegGMjESfmJeSCfXYOEMCfq6AsVSulCp6tQD96qDQJaD7TXRghWh2DecSx+DnXF5T/++lgzhUmWMcrJfHhg5Za6nJcBdBgtM0e64OTyowm4XCHn8+Hl4TILxAJHtzerMW1C1t0V44ZJXaNmHsLzkG2L7HejwDlSU0ERxHjo0pFOdebGIHT/4QF4S1x8ZsWhOGms+Znnlm6Jl9UL/51s3kxmTn3RnfCX4vlnGKUg++Li+bdlEq04FrrQ6arbCO9qjYAo+wAcDYXBrtbcVFUgg8GCobifc/T1ki6DVl78VCyd3hRWMGPv/BP6cz9vhkPXGWuvZWo4T1OV6Op7ZKcRi4PxE6V4j3/tFLzy9PO0wvLywrQXp1cO7jLvKT7fajx08VB7qQAKrUi4fuq81HXm7LM87bKjVI9pO9b970fxNW3+1rW9v37CZw0CJLsBs/vgfRbBs9869V909G5sauaXz0/OrBnRYdxFmRypHIJEE+8ODvhS5v5+303fdOLS1QvHNv2vh8+w47lytXAFutDpqjWEd7VFoGq/DO1zGdpKQoiMgdt39r815ZpUQqMwas0QrzUUS9cWjuZUfikrLzM1uz73pSJaDd62+btb/7sjnbPLi1wzOnKNsvbQem/ZOoBR14ldEqPn0j09lcn82nKizZD1C1tGrsFNAGXd3TTl7iZtWBt4jh5qt21XlnQd9utDiyYc0piLLnS6xspCQk0Q+IqpXJqwx9OQnSaduPlHR5llmmCVRX5y7JuXr99/rl97IVKG4vrT6SsL/dRlXSWKk1ovunJqajOZ7XC0b3mD1zBoHXJmS1c5pKX0IPpMmOCqRi9am99W91SVYqG0GtzNTDUTXeh01RrCu1ohIDYZDZaCJJp2WHn746Vlfew10ZLhP3KQa92lHSUiiRbfbXj87vgv7WTmXshqZBI08/i7R+t7WNS1hyErqH6+G/jMu/Jo6wBrhdzpXZZFRq4KxKd9ERKVJPMkkJ1/OHFulqfi58Nh8JbHt1Z2UAMjOCJHBzpdIQqwsDYIVO39qfihqA1HtXX0mw1aG5ma/+7SriWT+7drYUuvzvsR9UztW7TtMXjKwk1/X3+dWZHzOmKuj6ofObWylBAQDL0m/PmE+eXhsbX/G9rZ28G0emSAYmLv1XnIz2v+fpDGfLp7gpfM+KuIH78gpQDHmN6pl0udWzYlqmtRTDAOmHc58dO/odP6eNsYiQwfycy1w4iFh54l313by7zki8zyf7q1sZz3RbLuv/NV4tWN03r72IidFj0zpzbBs7ddTfx8fn6giVwFxQrqQKcrVgyWaosAAaxJA3UEVvR/X9zXtvK3Sc9P3t7GbV7N4lPjQSc+nR8nnR9tErjwk3e0dZsbI6Wr/oDLzCsD5RarNYnWQCUbDAGJ001UPQ+rwdRpAoKE+dH/xtboaTRgz55Rumgv0PKUt0mlyib1CvNvrg2TthfAAwkaFVCz/KUJ9ARUsVEQkJgMsDi2UcQ3QaElr86+qn4RDfvt3jvGoe5mVNQhHoK8K1Na2PiNCPkr6nOh9Eg1ys54tG969+Aj+GmbpiMXD7RtmmmbOkQNslKLADiTFVtjAi9NESiPPf+4aqo3re+f+8Y56qTBEDUHFVTEnlv/E/iH0Gw93OwsjMicwoz4uMya5fZVzaYH79rUpyFn4mqKN6TTNQR093nXNaTE+nASr93JF3806L1r/4Q6nLNZrw2uYCa8ZyYoEWHYNfTW8fG66SwpURkWNxoCEpNR2438Gk3vxhKs5xeajIY2lvS6l0t2G/z7nt0L+9jXxar7ulcPctQ9BDCTAQZYYWyie13zlRqRm82IivW8dvXm/ehnr2Ljk9OySyWT2snG1s4ePm069ug3dPTw7u7GMIHxlVB/W9Ulg6xCBv3cSzjI+m31PWwtRKAWCEg2c4SBSS2wg1UgAt8gAkQ4vPoN9jpsMkSg1giAOBabKy6EJ7/XGkJYESLwLSEgTn2hJKKGawW+JWxgWyECEAE5BMQmA+ywA8dM5LCBBRABiIAcAnDCuBwksAAiABFQjgAck1eODbwDEYAIyCGAmQz54wXkyGABRAAiABHAEMDmZcA0BnwWIAIQAQ0REA2yYkeZNOC2XBqqBskgAhAB3UNAlMuA9kL3OgZqBBHQTQTIor11wBRQGJ3oZgdBrSACuoUAHDHRrf6A2kAEdBwBaDJ0vIOgehAB3UJAtJIVJD9hOkO3+gVqAxHQUQTAFjuiZAY0GTraQVAtiIBuIQAWv2MKoaiy3et1S12oDUQAItC4CAAvQzQjQwhHTBq3I6B0iEDTQIAsjkiIRJgHbRodBrWECDQuApJ5GUI4a7xx+wFKhwg0EQQke382EW2hmhABiEAjI1A9YRyuMWnknoDiIQJNAgGRyYCzxZtEX0ElIQI6gIAk6wlPfteBvoAqQASaAALYvAw4vtoEOgqqCBHQDQQwL0OUxoB2Qzc6BGoBEdBtBP4PUsJrUAMgimAAAAAASUVORK5CYII=" alt="" />

以下是教程原话:

我们暂时还不支持用户,所以暂时使用占位符的用户对象,有时也被称为假冒或模仿的对象。这样让我们可以集中关注应用程序的某一方面,而不用花心思在暂未完成的部分上。

我希望你同意我的说法,上面的解决方案是非常难看!如果我们需要返回一个含有大量动态内容的大型以及复杂的 HTML 页面的话,代码将会有多么复杂啊!如果你需要改变你的网站布局,在一个大的应用程序,该应用程序有几十个视图,每一个直接返回HTML?这显然​​不是一 个可扩展的选择。

二、初步使用模板

就是把前端和后端的分离。

文件 app/templates/index.html

 <html>
<head>
<title>{{title}} - microblog</title>
</head>
<body>
<h1>Hello, {{user.nickname}}!</h1>
</body>
</html>

注意一下index.html的位置

我们只是写了一个大部分标准的HTML页面,唯一的区别是有一些动态内容的在 {{ ... }} 中。

然后在视图函数(文件 app/views.py)中使用这些模板,修改 app/views.py 内容:

 from app import app
from flask import render_template @app.route('/')
@app.route('/index')
def index():
user = { 'nickname': 'Miguel'} # fake user
return render_template("index.html",
title = 'Home',
user = user)

为了渲染模板,我们必须从 Flask 框架中导入一个名为 render_template 的新函数。此函数需要传入模板名以及一些模板变量列表,返回一个所有变量被替换的渲染的模板。

在内部,render_template 调用了 Jinja2 模板引擎,Jinja2 模板引擎是 Flask 框架的一部分。Jinja2 会把模板参数提供的相应的值替换了 {{...}} 块。

运行后的浏览器页面可以看到是和之前一样的。

关于模板中的控制和循环语句和其他语言没什么差别,很容易理解。

三、模板继承

我们知道多数网站都有导航栏,而同一个网站的导航栏都是一样的。在每个模板中复制粘贴同样的代码是很浪费时间,而且修改起来也很麻烦(修改一个部分就要把它的拷贝全部修改)。

教程原话:我们可以利用 Jinja2 的模板继承的特点,这允许我们把所有模板公共的部分移除出页面的布局,接着把它们放在一个基础模板中,所有使用它的模板可以导入该基础模板。

定义一个基础模板,该模板包含导航栏以及上面谈论的标题(文件 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 控制语句来定义派生模板可以插入的地方。块被赋予唯一的名字content。

然后修改我们的 index.html 模板继承自 base.html (文件 app/templates/index.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 %}

这样的话,之后如果要修改导航栏只需要修改一个地方就可以了。

Flask学习之二 模板的更多相关文章

  1. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  2. Flask 学习篇二:学习Flask过程中的记录

    Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...

  3. flask学习(九):模板渲染和参数传递

    一. 如何渲染模板 1. 模板放在templates文件夹下 2. 从flask中导入render_template函数 3. 在视图函数中,使用render_template函数,渲染模板 注意:只 ...

  4. Flask 学习(二)jinja2模板介绍

    控制语句和表达式 举例 Flask Python代码 from flask import Flask, render_template, redirect, request app = Flask(_ ...

  5. flask学习(二)

    一.蓝图 作用:给开发者提供目录结构 功能:1.自定义模板.静态文件目录 2.给一类url加前缀    3.给一类url添加before_request 目录结构 from flask_werkzur ...

  6. Flask 学习(二)路由

    Flask  路由 在说明什么是 Flask 路由之前,详细阐述下 Flask “Hello World” 这一 最小应用的代码. Flask “Hello World” from flask imp ...

  7. Flask 学习 十二 用户评论

    评论在数据库中的表示 由于评论和2个模型有关系,分别是谁发了评论,以及评论了哪个文章,所以这次要更新数据库模型 models.py 创建用户评论数据库模型 class Comment(db.Model ...

  8. flask学习(十二):for循环遍历

    一. 字典的遍历 语法和python一样,可以使用items().keys().values().iteritems().iterkeys().itervalues() {% for k, v in ...

  9. flask学习(十):模板中访问模型和字典的属性

    访问模型中的属性或者是字典,可以通过{{params.property}}的形式,或者是使用{{params['age']}}这样的形式

随机推荐

  1. GitHub and Git

    book:https://git-scm.com/book/zh/v2 Git使用简易指南:https://www.bootcss.com/p/git-guide

  2. 凸优化 & 1概念

    ---恢复内容开始--- 放射集合 系数之和为1 相加仍然能在集合内,就是 纺射集合 子空间加一个常熟 就是纺射集合 , 例题2.1 一类特殊的线性方程组的解可以看作纺射 集合 纺射包 aff C 是 ...

  3. 【CodeVS】1978 Fibonacci数列3

    1978 Fibonacci数列 3 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 青铜 Bronze 题目描述 Description 斐波纳契数列是这样的数列: f1 = 1 f ...

  4. Liferay 7:Liferay Nexus

    Liferay私服地址:https://repository.liferay.com/nexus/content/repositories/liferay-public-releases/

  5. Hibernate:**not found while looking for property: id https://blog.csdn.net/weixin_43827144/article/details/88935334

    https://blog.csdn.net/weixin_43827144/article/details/88935334 在程序执行时可能会报找不到属性的错误:例如:class Student n ...

  6. DataGrid无故多一行空白行

    DataGrid绑定datatable时, Datagrid.Itemsource=dt.DefaultView: 发现DataGRID会多处一行 解决如下: 对Datagrid的CanUserAdd ...

  7. python 对位运算

  8. 【水滴石穿】bstmy-blend-app

    这个项目是一个简单的底部导航切换页面 项目的地址为:https://github.com/Bstmy/bstmy-blend-app 先看效果 点击首页是首页面,点击个人中心是个人中心页面 先看代码 ...

  9. Intersection of Two Linked Lists两链表找重合节点

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  10. 关于spring中<util:/>的配置

    解决redis设置缓存时间找到的帖子,我这个初学者需要学习的还是很多的. 原文地址:http://www.doc100.net/bugs/t/216322/index.html 探索<util/ ...