在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Flask博客實(shí)戰(zhàn) – 實(shí)現(xiàn)全站導(dǎo)航菜單及首頁(yè)數(shù)據(jù)展示

    Flask博客實(shí)戰(zhàn) - 實(shí)現(xiàn)全站導(dǎo)航菜單及首頁(yè)數(shù)據(jù)展示

    Flask上下文處理器

    我們博客的設(shè)計(jì)是全站頂部菜單為通用菜單,調(diào)用的數(shù)據(jù)為文章的分類,那么如何將文章分類數(shù)據(jù)傳遞到每個(gè)頁(yè)面的上下文呢?

    為了將新變量自動(dòng)注入模板的上下文中,F(xiàn)lask 中存在上下文處理器context_processor。上下文處理器在呈現(xiàn)模板之前運(yùn)行,并且能夠?qū)⑿轮底⑷肽0迳舷挛摹I舷挛奶幚砥魇欠祷?span id="vcbw4wz" class="wpcom_tag_link">字典函數(shù)。然后,對(duì)于應(yīng)用程序中的所有模板,此字典的鍵和值將與模板上下文合并:

    用法如下所示,這只是一個(gè)例子:

    @app.context_processordef inject_user(): return dict(user=g.user)

    上面的上下文處理器是一個(gè)名為 user 的變量在模板中可用,其值為 g.user。這個(gè)例子不是很有趣,因?yàn)間無論如何都可以在模板中使用,但它給出了它是如何工作的。

    變量不限于值;上下文處理器還可以使函數(shù)可用于模板(因?yàn)镻ython允許傳遞函數(shù)):

    @app.context_processordef utility_processor(): def format_price(amount, currency=” “): return f”{amount:.2f}{currency}” return dict(format_price=format_price)

    上面的上下文處理器使format_price函數(shù)可用于所有模板:

    {{ format_price(0.33) }}

    您還可以將format_price構(gòu)建為模板篩選器,但這演示了如何在上下文處理器中傳遞函數(shù)。

    實(shí)現(xiàn)全站導(dǎo)航功能

    知道了上下文處理器的用法,實(shí)現(xiàn)這個(gè)功能就非常簡(jiǎn)單了!

    在RealProject目錄的__init__.py中插入如下一個(gè)上下文回調(diào)函數(shù)

    def inject_category(): # 上下文處理器回調(diào)函數(shù) “”” context_processor上下文處理器在呈現(xiàn)模板之前運(yùn)行,并且能夠?qū)⑿轮底⑷肽0迳舷挛?。上下文處理器是返回字典的函?shù)。 然后,對(duì)于應(yīng)用程序中的所有模板,此字典的鍵和值將與模板上下文合并: “”” from app.blog.models import Category categorys = Category.query.limit(6).all() return dict(categorys=categorys)

    這個(gè)函數(shù)通過limit()方法查詢出前6個(gè)數(shù)據(jù),并通過一個(gè)字典返回,之后我們還需要將該回調(diào)函數(shù)注冊(cè)到app的工廠函數(shù)當(dāng)中!

    def create_app(test_config=None): app = Flask(__name__, instance_relative_config=True) # 省略部分代碼 # 全局上下文 app.context_processor(inject_category) return app

    在app/blog/templates/base.html中循環(huán)查出我們返回的數(shù)據(jù)即可

    {% block navbar %} 首頁(yè) {% for cate in categorys %} {{ cate.name }} {% endfor %} {% endblock navbar %}

    實(shí)現(xiàn)首頁(yè)視圖數(shù)據(jù)

    在app/blog/views.py文件中的index首頁(yè)視圖函數(shù)中實(shí)現(xiàn)

    def index(): “””首頁(yè)視圖 “”” page = request.args.get(‘page’, 1, type=int) pagination = Post.query.order_by(-Post.add_date).paginate(page, per_page=9, error_out=False) post_list = pagination.items import random imgs = [‘圖一url’, ‘圖二url’, ‘圖三url’] for post in post_list: post.img = random.sample(imgs, 1)[0] # post.img = random.choice(imgs) return render_template(‘index.html’, posts=post_list, pagination=pagination)

    這個(gè)視圖函數(shù)中的查詢邏輯在實(shí)現(xiàn)文章管理的時(shí)候已經(jīng)實(shí)現(xiàn)過,這里唯一不同的區(qū)別就是我給這個(gè)返回?cái)?shù)據(jù)新增了一個(gè)img的屬性,因?yàn)樵跀?shù)據(jù)庫(kù)我們沒有設(shè)計(jì)文章形象圖字段,我們用這種方式彌補(bǔ),在imgs的列表中預(yù)設(shè)一些圖片的url地址,之后隨機(jī)抽取一個(gè)賦值給img屬性,這樣在模板中直接調(diào)用這個(gè)img屬性就會(huì)獲取到圖片的url!

    在app/blog/templates/base.html中替換相關(guān)循環(huán)數(shù)據(jù)

    {% for post in posts %}

    {{ post.title }}

    {{ post.desc }}

    {{ post.add_date }} {% endfor %}

    最終效果:

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月4日 09:21
    下一篇 2022年7月4日 09:21

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息