日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django项目--首页静态化

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django项目--首页静态化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0前言

1.使用Celery生成靜態頁面


task.py中新增任務函數generate_static_index_html(),任務函數生成靜態頁面。

@app.task def generate_static_index_html():'''產生首頁靜態頁面'''# 獲取商品的種類信息types = GoodsType.objects.all()# 獲取首頁輪播商品信息goods_banners = IndexGoodsBanner.objects.all().order_by('index')# 獲取首頁促銷活動信息promotion_banners = IndexPromotionBanner.objects.all().order_by('index')# 獲取首頁分類商品展示信息for type in types: # GoodsType# 獲取type種類首頁分類商品的圖片展示信息image_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=1).order_by('index')# 獲取type種類首頁分類商品的文字展示信息title_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=0).order_by('index')# 動態給type增加屬性,分別保存首頁分類商品的圖片展示信息和文字展示信息type.image_banners = image_bannerstype.title_banners = title_banners# 組織模板上下文context = {'types': types,'goods_banners': goods_banners,'promotion_banners': promotion_banners}# 使用模板# 1.加載模板文件,返回模板對象temp = loader.get_template('static_index.html')# 2.模板渲染static_index_html = temp.render(context)# 生成首頁對應靜態文件save_path = os.path.join(settings.BASE_DIR, 'static/index.html')with open(save_path, 'w') as f:f.write(static_index_html)

2.配置Nginx提供靜態頁面

Nginx配置文件中新增配置項

3.管理員修改首頁所需要表中的數據時,重新生成index靜態頁面。

在goods應用下的admin文件中,重寫save_model和delete_model方法。

當管理員在后臺新增或者刪除首先所需數據時,自動調用save_model或者delete_model,其中調用了Celery中的任務函數generate_static_index_html(),此時任務函數生成靜態頁面static/index.html,當用戶訪問時,將靜態頁面推送給瀏覽器。

from django.contrib import admin from django.core.cache import cache from goods.models import GoodsType,IndexPromotionBanner,IndexGoodsBanner,IndexTypeGoodsBanner # Register your models here.class BaseModelAdmin(admin.ModelAdmin):def save_model(self, request, obj, form, change):'''新增或更新表中的數據時調用'''super().save_model(request, obj, form, change)# 發出任務,讓celery worker重新生成首頁靜態頁from celery_tasks.tasks import generate_static_index_htmlgenerate_static_index_html.delay()# 清除首頁的緩存數據cache.delete('index_page_data')def delete_model(self, request, obj):'''刪除表中的數據時調用'''super().delete_model(request, obj)# 發出任務,讓celery worker重新生成首頁靜態頁from celery_tasks.tasks import generate_static_index_htmlgenerate_static_index_html.delay()# 清除首頁的緩存數據cache.delete('index_page_data')class GoodsTypeAdmin(BaseModelAdmin):passclass IndexGoodsBannerAdmin(BaseModelAdmin):passclass IndexTypeGoodsBannerAdmin(BaseModelAdmin):passclass IndexPromotionBannerAdmin(BaseModelAdmin):passadmin.site.register(GoodsType, GoodsTypeAdmin) admin.site.register(IndexGoodsBanner, IndexGoodsBannerAdmin) admin.site.register(IndexTypeGoodsBanner, IndexTypeGoodsBannerAdmin) admin.site.register(IndexPromotionBanner, IndexPromotionBannerAdmin)

總結

以上是生活随笔為你收集整理的Django项目--首页静态化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。