1. 程式人生 > 實用技巧 >django 靜態檔案&&模版的處理的一些實踐

django 靜態檔案&&模版的處理的一些實踐

靜態檔案與模版在django 中的處理既有相似的地方又有不同的地方
模版是程式碼關聯的,靜態檔案一般是css,js ,圖片等,一般靜態資源是需要進行比較好的處理的(量大,而且需要優化處理)

靜態資源的處理

  • 配置
    參考,注意app 以及project的會有覆蓋的效果,這個與template是一樣的
STATIC_URL = '/static/'
STATICFILES_DIRS = [
  os.path.join(BASE_DIR, "static"),
]
  • 優化處理
    推薦配置STATIC_ROOT,這樣在實際生成部署的使用,使用靜態資源模式拆分(nginx,apache.cdn....)
    命令
python manage.py collectstatic

好處是可以靜態資源的聚合,方便映象資源的獨立服務提供,但是可能會有衝突的問題(所以比較好的靜態資源字首命名就很重要的)

  • 程式碼使用
    推薦使用static 模版tag,可以減少路徑配置死
{% load static %}
<html>
<head >
  <link rel="stylesheet" type="text/css" href="{% static 'userlogin/app.css' %}">
</head>
 <div>
   this is userlogin demo app
 </div>
</html>

模版的處理

模版與靜態資源類似,但是是程式碼關聯的,同時也會有覆蓋的問題,一般推薦的寫法如下

  • 參考配置
TEMPLATES = [
   {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
      'context_processors': [
        'django.template.context_processors.debug',
        'django.template.context_processors.request',
        'django.contrib.auth.context_processors.auth',
        'django.contrib.messages.context_processors.messages',
       ],
     },
   },
]

處理是方便app 的可複用(打包為pip 包,同時我們也可以基於專案級別的templates 進行覆蓋)

參考資料

https://www.digitalocean.com/community/tutorials/working-with-django-templates-static-files
https://docs.djangoproject.com/en/3.1/topics/templates/
https://docs.djangoproject.com/en/3.1/howto/overriding-templates/
https://docs.djangoproject.com/en/3.1/ref/contrib/staticfiles/#django-admin-collectstatic
https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-STATIC_ROOT
https://docs.djangoproject.com/en/3.1/howto/static-files/