Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
flaskÖ®¶þ
 
  1346  次浏览      27
 2019-7-25
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚsegmentfault,ÎÄÕ½éÉÜÁËʹÓÃtemplateäÖȾģ°åʱ£¬´«µÝ¹Ø¼ü×Ö²ÎÊýÒÔ¼°Ä£°åÖеĺêµÈÏà¹ØÄÚÈÝ¡£

Ô¤ÈÈ

ÔÚäÖȾģ°åµÄʱºò£¬Ä¬ÈÏ»á´ÓÏîÄ¿¸ù·¾¶ÏµÄtemplatesĿ¼Ï²éÕÒÄ£°å

Èç¹ûÏëÒªÖ¸¶¨Ä£°å·¾¶µÄʱºò£¬¾ÍÔÚ³õʼ»¯APPµÄʱºò£¬ÕâÑù²Ù×÷¼´¿É£º

app = Flask(__name__,template_folder='C:/templates') #template_folder¿ÉÒÔÖ¸¶¨Ä£°åλÖÃ

Ä£°å´«²Î

ÔÚʹÓÃrender_templateäÖȾģ°åµÄʱºò£¬¿ÉÒÔ´«µÝ¹Ø¼ü×Ö²ÎÊý£¬ÒÔºóÖ±½ÓÔÚÄ£°åÖÐʹÓþͿÉÒÔÁË

Èç¹û²ÎÊý¹ý¶àµÄ»°£¬ÄÇô¾Í¿ÉÒÔ½«ËùÓеIJÎÊý·Åµ½Ò»¸ö×ÖµäÖУ¬È»ºóÔÙ´«Õâ¸ö²ÎÊýµÄʱºòʹÓÃ**½«×Öµä´òÉ¢³É¹Ø¼ü×Ö²ÎÊý¡£

СÀý×Ó£º

my_template.py

from flask import Flask,render_template
app = Flask(__name__)
app.debug = True
@app.route('/')
def hello_world():
context = {
'username': 'wanghui',
'age':19,
'children':{
'user':'ccc',
'type':'stu',
}
}
return render_template('index.html', **context)
# return render_template('index.html',context=context)
# return render_template('index.html',username='wanghui',age=19)
if __name__ == '__main__':
app.run()

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my blog</title>
</head>
<body>
<h1>ÕâÊÇÄ£°åäÖȾµÄÊý¾Ý</h1>
{#<p>{{ username }}</p>#}
{#<p>{{ age }}</p>#}
{{ context.username }}
{{ context.age }}
<p>{{ username }}</p>
<p>{{ children.user }}</p>
</body>
</html>

Ä£°åÖеÄurl_for

Ä£°åÖеÄurl_forºÍÊÓͼº¯ÊýÖеÄurl_forÊÇÀàËÆµÄ£¬Ò²ÊÇ´«µÝÊÓͼº¯ÊýµÄÃû×Ö£¬Ò²¿ÉÒÔ´«µÝ²ÎÊý¡£Ê¹ÓõÄʱºò£¬ÐèÒªÔÚurl_forÁ½±ß¼ÓÉÏÒ»¸ö{{ url_for('func_name'),ref='/',id='1'}}

templates.py

from flask import Flask,render_template,url_for
app = Flask(__name__)
app.debug = True
@app.route('/')
def hello_world():
return render_template('index.html')
@app.route('/accounts/login/<id>/')
def login(id):
return render_template('login.html')
if __name__ == '__main__':
app.run(port=8888)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my blog</title>
</head>
<body>
<h1>ÕâÊÇ´ÓÄ£°åÖÐäÖȾµÄ</h1>
<p><a href="{{ url_for('login',ref='/',id='1') }}">怫</a></p>
</body>
</html>

templates/login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login page</title>
</head>
<body>
<h1>ÕâÊǵÇÂ¼Ò³Ãæ</h1>
{#{{ ÓÃÀ´´æ·Å±äÁ¿ }}#}
{#{% ÓÃÀ´Ö´Ðк¯Êý»òÕßÂß¼­´úÂë %}#}
</body>
</html>

¹ýÂËÆ÷

ÓÐʱºòÎÒÃÇÐèÒªÔÚÄ£°åÖжÔһЩ±äÁ¿½øÐд¦Àí£¬ÄÇô¾Í±ØÐëÒªÀàËÆÓÚpythonÖеĺ¯ÊýÒ»Ñù£¬¿ÉÒÔ½«Õâ¸öÖµ´«µ½º¯ÊýÖУ¬È»ºó×öһЩ²Ù×÷¡£ÔÚÄ£°åÖйýÂËÆ÷Ï൱ÓÚÊÇÒ»¸öº¯Êý£¬°Ñµ±Ç°µÄ±äÁ¿´«Èëµ½¹ýÂËÆ÷ÖУ¬È»ºó¹ýÂËÆ÷»á¸ù¾Ý×Ô¼ºµÄ¹¦ÄÜ£¬ÔÙ·µ»ØÏàÓ¦µÄÖµ£¬Ö®ºóÔÙ½«½á¹ûäÖȾµ½Ò³ÃæÉÏ¡£

»ù±¾Óï·¨£º{{ variable |¹ýÂËÆ÷µÄÃû×Ö }}

guo

abs(value)£º·µ»ØÒ»¸öÊýÖµµÄ¾ø¶ÔÖµ¡£ ÀýÈ磺-1|abs¡£

default(value,default_value,boolean=false)£ºÈç¹ûµ±Ç°±äÁ¿Ã»ÓÐÖµ£¬Ôò»áʹÓòÎÊýÖеÄÖµÀ´´úÌæ¡£name|default('xiaotuo')¡ª¡ªÈç¹ûname²»´æÔÚ£¬Ôò»áʹÓÃxiaotuoÀ´Ìæ´ú¡£boolean=FalseĬÈÏÊÇÔÚÖ»ÓÐÕâ¸ö±äÁ¿ÎªundefinedµÄʱºò²Å»áʹÓÃdefaultÖеÄÖµ£¬Èç¹ûÏëʹÓÃpythonµÄÐÎʽÅжÏÊÇ·ñΪfalse£¬Ôò¿ÉÒÔ´«µÝboolean=true¡£Ò²¿ÉÒÔʹÓÃorÀ´Ìæ»»¡£

escape(value)»òe£º×ªÒå×Ö·û£¬»á½«<¡¢>µÈ·ûºÅתÒå³ÉHTMLÖеķûºÅ¡£ÀýÈ磺content|escape»òcontent|e¡£

first(value)£º·µ»ØÒ»¸öÐòÁеĵÚÒ»¸öÔªËØ¡£names|first¡£

format(value,arags,*kwargs)£º¸ñʽ»¯×Ö·û´®¡£ÀýÈçÒÔÏ´úÂ룺

{{ "%s" - "%s"|format('Hello?',"Foo!") }}\
½«Êä³ö£ºHelloo? - Foo!

last(value)£º·µ»ØÒ»¸öÐòÁеÄ×îºóÒ»¸öÔªËØ¡£Ê¾Àý£ºnames|last¡£

length(value)£º·µ»ØÒ»¸öÐòÁлòÕß×ÖµäµÄ³¤¶È¡£Ê¾Àý£ºnames|length¡£

join(value,d=u'')£º½«Ò»¸öÐòÁÐÓÃdÕâ¸ö²ÎÊýµÄֵƴ½Ó³É×Ö·û´®¡£

safe(value)£ºÈç¹û¿ªÆôÁËÈ«¾ÖתÒ壬ÄÇôsafe¹ýÂËÆ÷»á½«±äÁ¿¹ØµôתÒ塣ʾÀý£º

content_html|safe¡£

int(value)£º½«Öµ×ª»»ÎªintÀàÐÍ¡£

float(value)£º½«Öµ×ª»»ÎªfloatÀàÐÍ¡£

lower(value)£º½«×Ö·û´®×ª»»ÎªÐ¡Ð´¡£

upper(value)£º½«×Ö·û´®×ª»»ÎªÐ¡Ð´¡£

replace(value,old,new)£º Ìæ»»½«oldÌæ»»ÎªnewµÄ×Ö·û´®¡£

truncate(value,length=255,killwords=False)£º½ØÈ¡length³¤¶ÈµÄ×Ö·û´®¡£

striptags(value)£ºÉ¾³ý×Ö·û´®ÖÐËùÓеÄHTML±êÇ©£¬Èç¹û³öÏÖ¶à¸ö¿Õ¸ñ£¬½«Ìæ»»³ÉÒ»¸ö¿Õ¸ñ¡£

trim£º½ØÈ¡×Ö·û´®Ç°ÃæºÍºóÃæµÄ¿Õ°××Ö·û¡£

string(value)£º½«±äÁ¿×ª»»³É×Ö·û´®¡£

wordcount(s)£º¼ÆËãÒ»¸ö³¤×Ö·û´®Öе¥´ÊµÄ¸öÊý¡£

default¹ýÂËÆ÷Ïê½â£º

Èç¹ûij¸ö±äÁ¿Ê¹Ó÷½Ê½ÊÇ{{ value|default('ĬÈÏÖµ')}}£¬Èç¹ûvalueÕâ¸ökey²»´æÔڵϰ¾ÍʹÓùýÂËÆ÷ÌṩµÄĬÈÏÖµ£»Èç¹ûÀàËÆÓÚpythonÖÐÅжÏÒ»¸öÖµÊÇ·ñΪFalse£¨ÀýÈ磺¿Õ×ֵ䣬¿Õ×Ö·û´®£¬¿ÕÁбíµÄ»°£©ÄÇô¾Ã±ØÐëÒª´«µÝÁíÍâÒ»¸ö²ÎÊý{{ value | default('ĬÈÏÖµ'£¬boolean=True)}};

¿ÉÒÔʹÓÃorÀ´Ìæ»»default('ĬÈÏÖµ'£¬boolean=True)£¨ÀýÈç{{ siginature or '´ËÈ˺ÜÀÁûÓÐÁôÏÂÈκÎ˵Ã÷'}}£©

Àý×Ó£º

defaulte_falter.py

from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
context = {
'position':-9,
'signature':'',
#'signature':'this ismy blog'
}
return render_template('index.html',**context)
if __name__ == '__main__':
app.run(debug=True)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
{#<p>¸öÐÔÇ©Ãû£º{{ signature|default('´ËÈ˺ÜÀÁûÓÐÁôÏÂÈκÎ˵Ã÷£¡',boolean=True) }}</p>#}
<p>¸öÐÔÇ©Ãû£º{{ signature or '´ËÈ˺ÜÀÁûÓÐÁôÏÂÈκÎ˵Ã÷£¡'}}</p>
</body>
</html>

esacape£º×ªÒå¹ýÂËÆ÷

safe¹ýÂËÆ÷£º¿ÉÒԹرÕÒ»¹«·Ö×Ö·û´®µÄ×Ô¶¯×ªÒå

escape¹ýÂËÆ÷£º¶Ôij¸ö×Ö·û´®½øÐÐתÒå

autoescape¹ýÂËÆ÷£º¿ÉÒÔ¶ÔÆä´úÂë¿òÄڵĴúÂë¿é¹Ø±Õ×Ô¶¯×ªÒå

first£º·µ»ØÐòÁÐÖеĵÚÒ»¸öÔªËØ

last£º·µ»ØÐòÁÐÖеÄ×îºóÒ»¸öÔªËØ

format£º¸ñʽ»¯Êä³ö

length£º³¤¶È¼ÆËã

int£º×ª»»³ÉÕûÊý

replase£º¾É×Ö·û´®»»³ÉеÄ

truncate£ºÖ¸¶¨³¤¶È½ØÈ¡£¨½áºÏstriptagsÈ¥³ýµôhtml×Ö¶ÎÖ®ºó½ØÈ¡´¿¾»×Ö·û´®È»ºó°´×ÖÊýÈ¥×öÔ¤ÀÀÒ³Ìî³ä£©

striptags£ºÈ¥³ý±êÇ©ÖеÄhtml×Ö¶Î

worldcount(s)£ºÍ³¼ÆÒ»¸ö³¤×Ö·û´®Öеĵ¥´ÊÊý

СÀý×Ó£º

escape.py

from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
context = {
'position':-9,
'signature':'<script>alert("Hello world!")</script>',
'persons':['abc','def'],
'age':"18",
'article':'hello hello xxooo xxooo!!'
}
return render_template('index.html',**context)
if __name__ == '__main__':
app.run(debug=True,port=8080)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
{#{% autoescape off %}#}
{#<p>¸öÐÔÇ©Ãû£º{{ signature }}</p>#}
{#{% endautoescape %}#}
<p>{{ signature|safe }}</p>
<p>{{ persons|first }}</p>
<p>{{ persons[0] }}</p>
<p>{{ persons|last }}</p>
<p>{{ persons[-1] }}</p>
<p>{{ "ÎÒµÄÃû×ÖÊÇ%s"|format("hello word!") }}</p>
<p>{{ "ÈËÊýÊÇ %d"|format(persons|length) }}</p>
{% if age|int == 18 %}
<p>ÄêÁäÊÇ18Ëê</p>
{% else %}
<p>ÄêÁä²»ÊÇ18Ëê</p>
{% endif %}
<p>{{ article|replace('hello','sssssz') }}</p>
<p>{{ article|truncate(length=5) }}</p>
<p>{{ signature|striptags }}</p>
</body>
</html>

×Ô¶¨ÒåÄ£°å¹ýÂËÆ÷

ÔÚpythonÎļþÖÐдºÃ×Ô¼ºµÄ¹ýÂËÆ÷£¨±¾ÖÊÉϾÍÊÇÒ»¸öº¯Êý£©

Èç¹ûÒªÔÚÄ£°åÖе÷ÓÃÕâ¸ö¹ýÂËÆ÷£¬ÄǾÍÐèÒªÔÚÕâ¸öº¯ÊýÉϼÓÒ»¸ö×°ÊÎÆ÷@app.template_filter('¹ýÂËÆ÷Ãû³Æ')

×Ô¶¯¼ÓÔØµÄ»°¾ÍÔÚappÏÂÌí¼Ó

app.config['TEMPLATES_AUTO_RELOAD'] = True

СÀý×Ó£º

define_filter.py

from flask import Flask,render_template
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD'] = True
@app.route('/')
def hello_world():
context={
'article':'anyway hello anyway hello abccc'
}
return render_template('index.html',**context)
@app.template_filter('cut')
def cut(value):
vaule = value.replace("hello","sbsb")
return value
if __name__ == '__main__':
app.run(debug=True,port=9090)**

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>myblog</title>
</head>
<body>
<p>{{ article|cut }}</p>
</body>
</html>

ʵս×Ô¶¨Òå¹ýÂËÆ÷

ʱ¼ä´¦Àí£¨´ÓÏÖÔÚµ½·¢ÌûµÄʱ¼ä²î£©

shizhan.py

from flask import Flask,render_template
from datetime import datetime
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD'] = True
@app.route('/')
def index():
context={
'article':'aaa bbb ccc',
'create_time':datetime(2018,02,23,10,12,11)
}
return render_template('index.html',**context)
@app.template_filter('handle_time')
def handle_time(time):
'''
1.¾àÀëÏÖÔÚµÄʱ¼ä¶à¾Ã£¬Èç¹û¼ä¸ôÔÚÒ»·ÖÖÓÒÔÄھͱíʾ¸Õ¸Õ
2.ÔÚһСʱÒÔÄÚ¾ÍÏÔʾxx·ÖÖÓǰ
3.ÔÚ24СʱÒÔÄÚ¾ÍÏÔʾxxСʱǰ
4. ÔÚÒ»¸öÔÂÖ®ÄÚ¾ÍÏÔʾ¶àÉÙÌì֮ǰ
5. ·ñÔò¾ÍÏÔʾ¾ßÌåµÄʱ¼ä
:param time:
:return:
'''
if isinstance(time,datetime):
now = datetime.now()
timestamp = (now - time).total_seconds() #»ñÈ¡¼ä¸ôÃëÊý
if timestamp < 60:
return "¸Õ¸Õ"
elif timestamp >=60 and timestamp<= 60*60:
minutes = timestamp/60
return "%sᅅ",int(minutes)
elif timestamp >= 60*60 and timestamp <= 60*60*24:
hours = timestamp/(60*60)
return "%sСʱǰ",int(hours)
elif timestamp >= 60*60*24 and timestamp<= 60*60*24*30:
days = timestamp/(60*60*24)
return "%sÌìǰ",int(days)
else:
return time.strftime('%Y-%m-%d %H:%M')
if __name__ == '__main__':
app.run(port=9092,debug=True)

 

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
<p>·¢±íʱ¼ä:{{ create_time|handle_time }}</p>
</body>
</html>

Ìõ¼þÅжÏ

ForÑ­»·

ÔÚjinjia2ÖеÄforÑ­»·£¬¸úpythonÖеÄforÑ­»·»ù±¾ÊÇÒ»Öµģ¬Ò²ÊÇÓÃfor inÐÎʽ£»

¶øÇÒ¿ÉÒÔ±ãÀûËùÓеÄÐòÁÐÒÔ¼°µü´úÆ÷£¬µ«ÊÇΨһ²»Í¬µÄÊÇjinjia2ÖеÄforÑ­»·Ã»ÓÐbreakºÍcontinue

СÀý×Ó£º

for_ex.py

from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
context = {
'users':['user01','user02','user03'],
'person':{
'username':'wanghui',
'age':21,
'country':'china',
},
'books':[
{
'name':'sk1',
'author':'saa',
'price':100,
},
{
'name': 'aaaeede1',
'author': 'se232aa',
'price': 103,
},
{
'name': 'AAAew',
'author': 'VVVeqwea',
'price': 190,
},
{
'name': 'skfdfds1',
'author': 'sdfsfsdfdaa',
'price': 30,
}
]
}
return render_template('index.html',**context)
if __name__ == '__main__':
app.run(debug=True)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
<ul>
{% for user in users %}
<p>{{ user }}</p>
{% endfor %}
</ul>
<table>
<thead>
<tr>
<th>Óû§Ãû</th>
<th>ÄêÁä</th>
<th>¹ú¼Ò</th>
</tr>
</thead>
<tbody>
<tr>
{% for key,value in person.items() %}
<td>{{ value }}</td>
{% endfor %}
</tr>
</tbody>
<table>
<thead>
<tr>
<th>ID</th>
<th>ÊéÃû</th>
<th>×÷Õß</th>
<th>¼Û¸ñ</th>
<th>×ÜÊý</th>
</tr>
</thead>
<tbody>
{% for book in books %}
{% if loop.first %}
<tr style="background: red">
{% elif loop.last %}
<tr style="background: blue">
{% else %}
<tr>
{% endif %}
<td>{{ loop.index }}</td>
<td>{{ book.name }}</td>
<td>{{ book.author }}</td>
<td>{{ book.price }}</td>
<td>{{ loop.length }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</table>
<table border="1px">
<tbody>
{% for x in range(1,10) %}
<tr>
{% for y in range(1,x+1) if y <= x %}
<td>{{ y }}*{{ x }}={{ x*y }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>

ºê

Ä£°åÖеĺê¸úpythonÖеĺ¯ÊýÀàËÆ£¬¿ÉÒÔ´«µÝ²ÎÊý£¬µ«ÊDz»ÄÜÓзµ»ØÖµ

ʹÓúêµÄʱºò£¬²ÎÊý¿ÉÒÔÊÇĬÈÏÖµ

СÀý×Ó£º

macro.py

from flask import Flask,render_template
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['DEBUG'] = True
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run(port=9999)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Macro</title>
</head>
<body>
{% macro input(name="",value="",type="text") %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}
<h1>µÇÂ½Ò³Ãæ</h1>
<table>
<tbody>
<tr>
<td>Óû§Ãû£º</td>
<td>{{ input('username') }}</td>
</tr>
<tr>
<td>ÃÜÂ룺</td>
<td>{{ input('password',type='password') }}</td>
</tr>
<tr>
<td></td>
<td>{{ input(value='Ìá½»',type='submit') }}</td>
</tr>
</tbody>
</table>
</body>
</html>

ºêµÄµ¼Èë

ÔÚÕæÊµµÄ¿ª·¢ÖУ¬»á½«Ò»Ð©³£Óõĺ굥¶À·ÅÔÚÒ»¸öÎļþÖУ¬ÔÚÐèҪʹÓõÄʱºò£¬ÔÙ´ÓÕâ¸öÎļþÖнøÐе¼Èë¡£

importÓï¾äµÄÓ÷¨¸úpythonÖеÄimportÀàËÆ£¬¿ÉÒÔÖ±½Óimport...as...£¬Ò²¿ÉÒÔfrom...import...»òÕßfrom...import...as...£¬¼ÙÉèÏÖÔÚÓÐÒ»¸öÎļþ£¬½Ð×öforms.html£¬ÀïÃæÓÐÁ½¸öºê·Ö±ðΪinputºÍtextarea£¬ÈçÏ£º

×¢ÒâÊÂÏ

a. inportºêÎļþ as xxx

b. from ºêÎļþ·¾¶ import ºêµÄÃû×Ö [as xxx]

c. ºêÎļþµÄ·¾¶£¬²»ÒªÒÔÏà¶Ô·¾¶È¥ÕÒ£¬¶¼ÒªÒÔtemplates×÷Ϊ¾ø¶Ô·¾¶È¥ÕÒ

d. Èç¹ûÏëÒªÔÚµ¼ÈëºêµÄʱºò£¬¾Í°Ñµ±Ç°Ä©°àµÄһЩ²ÎÊý´«µÝ¸øºêËùÔÚµÄÄ£°å£¬ÄÇô¾ÍÓ¦¸ÃÔÚµ¼ÈëµÄʱºòʹÓÃ

with context

СÀý×Ó£º

macros.py

from flask import Flask,render_template
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['DEBUG'] = True
@app.route('/')
def hello_world():
return render_template('index/index.html')
if __name__ == '__main__':
app.run(port=9999)

templates/macros/macros.html

{% macro input(name="",value="",type="text") %}
<input type="{{ type }}" name="{{ name }}" value="{{ username }}">
{% endmacro %}

templates/index/index.html

{#{% from "macros.html" import input as inp %}#}
{% import "macros/macros.html" as macros with context %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Macro</title>
</head>
<body>
<h1>µÇÂ½Ò³Ãæ</h1>
<table>
<tbody>
<tr>
<td>Óû§Ãû£º</td>
<td>{{ macros.input('username') }}</td>
</tr>
<tr>
<td>ÃÜÂ룺</td>
<td>{{ macros.input('password',type='password') }}</td>
</tr>
<tr>
<td></td>
<td>{{ macros.input(value='Ìá½»',type='submit') }}</td>
</tr>
</tbody>
</table>
</body>
</html>

include±êÇ©

Õâ¸ö±êÇ©Ï൱ÓÚÊǽ«Ö¸¶¨Ä£°åÖеĴúÂë¸´ÖÆÕ³Ìùµ½µ±Ç°µÄλÖÃ

include±êÇ©£¬Èç¹ûÒª¼ÌÐøÊ¹Óø¸Ä£°åÖеıäÁ¿£¬Ö±½ÓÓþͿÉÒÔÁË

includeµÄ·¾¶Ò²ºÍimportÒ»Ñù£¬ÐèÒª´ÓtemplatesΪ¸ù£¬²»ÒªÒÔÏà¶Ô·¾¶È¥ÕÒ¡£

СÀý×Ó£º

include_ex.py

from flask import Flask,render_template
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD']
@app.route('/')
def hello_world():
return render_template('index.html',username='wanghui')
@app.route('/detail/')
def detail():
return render_template('course_detail.html')
if __name__ == '__main__':
app.run(debug=True)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
{% include "common/header.html" %}
<div class="content">ÖмäµÄ</div>
{% include "common/footer.html" %}
<ul>{{ username }}</ul>
</body>
</html>

templates/course_detail.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% include "common/header.html" %}
<div class="content">ÎÄÕÂÏêÇ飡</div>
{% include "common/footer.html" %}
</body>
</html>

templates/common/header.html

<style>
.nav ul{
overflow: hidden;
}
.nav ul li{
float: left;
margin: 0 20px;
}
</style>
<nav class="nav">
<ul>
<li>Ê×Ò³</li>
<li>²©¿ÍÏêÇé</li>
<li>½Ì³ÌÖÐÐÄ</li>
<li>¹ØÓÚÎÒ</li>
</ul>
</nav>

templates/common/footer.html

<footer>ÕâÊǵײ¿</footer>

set withÓï¾ä

ÔÚÄ£°åÖУ¬¿ÉÒÔʹÓÃsetÀ´¶¨Òå±äÁ¿£»Ò»µ©¶¨ÒåÁËÕâ¸ö±äÁ¿¡£ÄÇôÔÚºóÃæµÄ´úÂëÖУ¬¶¼¿ÉÒÔʹÓÃÕâ¸ö±äÁ¿¡£

withÓï¾ä¶¨ÒåµÄ±äÁ¿£¬Ö»ÄÜÔÚwithµÄ´úÂë¿éÖÐʹÓᣳ¬³öwith´úÂë¿é£¬Ôò²»ÄÜʹÓÃ

with²»Ò»¶¨Òª¸úÒ»¸ö±äÁ¿£¬Ò²¿ÉÒÔÊÇÒ»¸ö¿ÕµÄwithÓï¾ä£¬ÒÔºóÒªÓõϰ£¬¾ÍÔÚwithÖÐʹÓÃset¶¨ÒåµÄ±äÁ¿À´Ê¹Óá£

<body>
{% set username='wanghui' %}
<p>Óû§Ãû£º{{ username }}</p>
{% with %}
{% set classroom='2018' %}
<p>°à¼¶£º{{ classroom }}</p>
{% endwith %}
<p>±ðµÄ°à¼¶{{ classroom }}</p>
</body>

¼ÓÔØ¾²Ì¬Îļþ

¼ÓÔØ¾²Ì¬ÎļþʹÓõÄÊÇurl_forº¯Êý£¬µÚÒ»¸ö²ÎÊýΪstatic,µÚ¶þ¸ö²ÎÊýÊÇfilename='path'

·¾¶²éÕÒÒªÒÔstaticĿ¼×÷Ϊ¸ùĿ¼

СÀý×Ó£º

static_ex.py

from flask import Flask,render_template
app = Flask(__name__)
app.config.update({
'DEBUG':True,
'TEMPLATES_AUTO_RELOAD':True,
})
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run()

static/css/index.css

body{
background: pink;
}

static/js/index.js

alert('hello user!')

 

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{{ url_for('static',filename="css/index.css") }}">
<script src="{{ url_for('static',filename="js/index.js") }}"></script>
</head>
<body>
<img src="{{ url_for('static',filename='imgs/asa.jpg') }}" alt="">
</body>
</html>

Ä£°å¼Ì³Ð

ΪʲôÐèҪģ°å¼Ì³Ð£¿

¿ÉÒÔ½«Ò»Ð©¹«ÓõĴúÂëµ¥¶À³éÈ¡³öÀ´·Åµ½Ò»¸ö¸¸Ä£°åÖУ¬ÒÔºó×ÓÄ£°åÖ±½Ó¼Ì³Ð¾Í¸ø¿ÉÒÔʹÓÃÁË¡£

ÕâÑù¿ÉÒÔ¼õÉÙÖØ¸´ÐԵĴúÂ룬²¢ÇÒÒÔºó´úÂëÐÞ¸ÄÆðÀ´Ò²ºÜ·½±ã

Ä£°å¼Ì³ÐµÄÓï·¨

ʹÓÃextendsÓï¾äÀ´Ö¸Ã÷¼Ì³ÐµÄ¸¸Ä£°å¡£¸¸Ä£°åµÄ·¾¶Ò²¾ÍÊÇÏà¶ÔÓÚtemplatesÎļþ¼Ðϵľø¶Ô·¾¶¡£Àý×ÓÈçÏÂ{% extends 'base.html' %}

blockÓï·¨

Ò»°ãÔÚ¸¸Ä£°åÖÐÖ»Äܶ¨ÒåһЩ¹²ÐÔ¹«ÓõĴúÂ룬×ÓÄ£°å¿ÉÄÜÒª¸ù¾Ý²»Í¬µÄÐèÇóʵÏÖ²»Í¬µÄ´úÂë¡£Õâʱºò¸¸Ä£°å¾ÍÓ¦¸ÃÌṩһ¸ö½Ó¿Ú£¬ÈÃ×ÓÄ£°åÀ´ÊµÏÖ¡£´Ó¶øÊµÏÖÒµÎñµÄ¾ßÌ幦ÄÜ¡£

ÔÚ¸¸Ä£°åÖÐ

{% block body_block %}
<p>ÎÒÊÇbaseϵÄ</p>
{% endblock %}

ÔÚ×ÓÄ£°åÖÐ

{% block body_block %}
<p>ÎÒÊÇindexµÄÄÚÈÝ</p>
{% endblock %}

µ÷Óø¸Ä£°å´úÂëblockÖеĴúÂë

ĬÈÏÇé¿öÏ£¬×ÖÄ»°æÊµÏÖÁ˸¸Ä£°å¶¨ÒåµÄblock£¬ÄÇô×ÓÄ£°åÖÐblockµÄ´úÂë¾Í»á¸²¸Çµô¸¸Ä£°åÖеĴúÂ룬ҪÏë±£Áô¸¸Ä£°åÖеÄblockµÄ»°¾ÍÊÇÓÃ{{ super() }}À´ÊµÏÖ

¸¸Ä£°åµÄÄÚÈÝ£º

{% block body_block %}
<p style="background: red">base.html</p>
{% endblock %}

×ÓÄ£°åÖеÄÄÚÈÝ£º

{% extends 'base.html' %}
{% block body_block %}
{{ super() }}
<p style="background: green">ÎÒÊÇindexµÄÄÚÈÝ</p>
{% endblock %}

µ÷ÓÃÁíÍâÒ»¸öblockÖеĴúÂë

ÔÚÁíÍâÒ»¸öÄ£°åÖÐʹÓÃÆäËûÄ£°åÖеĴúÂ룬¿ÉÒÔʹÓÃ{{ self.blockname() }}¼´¿É

¸¸Ä£°å

<title>{% block title %}
{% endblock %}</title>
<body>
{% block body_block %}
<p style="background: red">base.html</p>
{% endblock %}
</body>

×ÓÄ£°å£º

{% extends 'base.html' %}
{% block title %}
MyIndex
{% endblock %}
{% block body_block %}
{{ super() }}
{{ self.title() }}
<p style="background: green">ÎÒÊÇindexµÄÄÚÈÝ</p>
{% endblock %}

ÆäËû×¢ÒâÊÂÏî

¼Ì³ÐµÄ´úÂë±ØÐë·ÅÔÚ×ÓÄ£°åÖеĵÚÒ»ÐÐ{% extends 'base.html' %}

×ÓÄ£°åÖÐҪʵÏÖ×Ô¼ºµÄ´úÂ룬Ҫ·Åµ½blockÖУ¬²»È»²»ÉúЧ

¼Ì³ÐµÄÀý×Ó£º

inherit_ex.py

from flask import Flask,render_template
app = Flask(__name__)
app.config.update({
'DEBUG':True,
'TEMPLATES_AUTO_RELOAD':True
})
@app.route('/')
def index():
return render_template('index.html')
@app.route('/detail/')
def detail():
return render_template('course_detail.html')
if __name__ == '__main__':
app.run()

templates/base.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}
{% endblock %}</title>
<style>
.nav ul{
overflow: hidden;
}
.nav ul li{
float: left;
margin: 0 20px;
}
</style>
</head>
<body>
<nav class="nav">
<ul>
<li>Ê×Ò³</li>
<li>²©¿ÍÏêÇé</li>
<li>½Ì³ÌÖÐÐÄ</li>
<li>¹ØÓÚÎÒ</li>
</ul>
</nav>
{% block body_block %}
<p style="background: red">base.html</p>
{% endblock %}
<footer>ÕâÊǵײ¿</footer>
</body>
</html>

templates/index.html

{% extends 'base.html' %}
{% block title %}
MyIndex
{% endblock %}
{% block body_block %}
{{ super() }}
{{ self.title() }}
<p style="background: green">ÎÒÊÇindexµÄÄÚÈÝ</p>
{% endblock %}

templates/course_detail.html

{% extends 'base.html' %}
{% block body_block %}
<p>this is course </p>
{% endblock %}
 
   
1346 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ