Django_jinja2

Django 使用Jinja2模板

網上有不少教程,但我照着作仍是遇到了不少坑,版本問題傷不起。css

個人環境: ubuntu 16.4+python3.6+django(2.1) + jinja2(2.10.1)python

先上別人的博客,而後我在補充下我到的坑。
傳送門jquery

  1. 靜態文件:

# settings.py
STATIC_URL = '/static/'
 
# 當運行 python manage.py collectstatic 的時候
# STATIC_ROOT 文件夾 是用來將全部STATICFILES_DIRS中全部文件夾中的文件,以及各app中static中的文件都複製過來
# 把這些文件放到一塊兒是爲了用apache等部署的時候更方便
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
 
# 其它 存放靜態文件的文件夾,能夠用來存放項目中公用的靜態文件,裏面不能包含 STATIC_ROOT
# 若是不想用 STATICFILES_DIRS 能夠不用,都放在 app 裏的 static 中也能夠
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "common_static"),
    '/path/to/others/static/',  # 用不到的時候能夠不寫這一行
)
 
# 下面這個是默認設置,Django 默認會在 STATICFILES_DIRS中的文件夾 和 各app下的static文件夾中找文件
# 注意有前後順序,找到了就再也不繼續找了

# STATICFILES_FINDERS = (
#     "django.contrib.staticfiles.finders.FileSystemFinder",
#     "django.contrib.staticfiles.finders.AppDirectoriesFinder"
# )

靜態文件放在對應的 app 下的 static 文件夾中 或者 STATICFILES_DIRS 中的文件夾中。apache

爲何不直接放在static文件夾下?文件命名空間django

eg:把 jquery.js 這種各個app通用的文件放在 common_static/js/ 下,這樣就能夠 在 /static/js/jquery.js 中訪問到它!ubuntu

部署時 須要收集靜態文件

python manage.py collectstatic

這一句話就會把之前放在app下static中的靜態文件所有拷貝到 settings.py 中設置的 STATIC_ROOT 文件夾中app

當 DEBUG = True 時,Django 就能自動找到放在裏面的靜態文件。(Django 經過 STATICFILES_FINDERS 中的「查找器」,找到符合的就停下來,尋找的過程 相似於 Python 中使用 import xxx 時,找 xxx 這個包的過程)。ui

比較容易混淆的幾個點 STATIC_URL

  1. STATIC_URL = '/static/' 不是路徑 url的意思。它是映射的意思。靜態文件的絕對路徑(STATICFILES_DIRS裏的路徑或者App目錄下static路徑或STATIC_ROOT的路徑),好比 "/home/xxx/code/mysite/static/app/css/style.css",直接映射爲:「/static/app/css/style.css」。url訪問靜態文件:http://127.0.0.1:8000/static/app/css/style.css. {% static 'appname/css/style.css' %}, {% static %} 模板標籤會生成靜態文件的絕對路徑。
    url("images/background.gif") 的寫法同理。url

  2. STATIC_ROOT 不是根目錄,是部署時收集起來的目錄。.net

  3. STATICFILES_DIRS 是通用目錄和其餘目錄(地址隨便在你計算機上哪裏),按照STATICFILES_FINDERS的默認查找順序,他的優先級還高於App目錄下的static目錄。

jinja2 中static url

django模板寫法

{% load static %}
<link rel="stylesheet" href="{% static 'style.css' %}">

jinja2寫法

{{ static('css/index.css') }}
{{ url('detail', args=(question.id, ) }}

注意再也不須要 load static,注意兩層引號

<link rel ="stylesheet" href="{{ static('appname/stytle.css') }}" >

幾個老版本的寫法:

  1. 在settings.py中的TEMPLATES/OPTIONS添加'builtins':['django.templatetags.static'],這樣之後在模版中就能夠直接使用static標籤,而不用手動的load了。報錯:沒有builtins

  2. {%load staticfiles%}與{%load static%}之間有什麼區別?前面老版本,後面新版本。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息