簡體   English   中英

如何在Django項目中構造模板和靜態文件?

[英]How do I structure templates and static files in a django project?

我對如何構建項目以使html文件中的相對路徑感到困惑。 例如,假設我有index.html ,並且其中有一個圖像。 我有一個名為img的圖像文件夾,其中有cat.png

因此,在我的index.html中,我有<img src='img/cat.png'> 現在,所有這些文件都位於我項目的static文件夾中,並且帶有STATIC_URL='/static/' ,因此它們是靜態提供的,而且效果很好:由於index.html位於/static/ ,因此img/cat.png是發現沒有問題。

但這是問題所在:

假設我想將index.html用作模板。 因此,我為此定義了一條路由,在urls.py/appname/index.html ,然后在views.py中為該路由創建一個視圖,該視圖使用需要進入的任何數據渲染該模板。 太好了,現在我為該渲染模板提供服務,它位於/appname/index.html 但這意味着它將在該路徑中查找所有這些靜態文件,例如,它將在/appname/img/cat.png而不是/static/img/cat.png處查找cat圖像。

當然,我可以遍歷index.html並將每個相對路徑更改為絕對路徑,但這並不好,因為那樣的話我就不得不擔心如果移動文件會發生什么情況。 在我的特定情況下,我發現我正在使用的某些javascript動態加載一些CSS,並且我不想進入並編輯javascript也都使用絕對路徑。

那么這是什么一回事? Django是否只擅長提供靜態內容,而我應該為此使用nginx或apache? 我知道Django應該能夠用作完整的生產服務器,所以我不知道這里發生了什么。 有什么想法嗎?

您應該結合使用模板語言,中間件和一些配置。 有關如何執行此操作的說明,請參見此處-https://docs.djangoproject.com/en/1.8/howto/static-files/

  1. 確保django.contrib.staticfiles包含在INSTALLED_APPS中。
  2. 在您的設置文件中,定義STATIC_URL ,例如:

    STATIC_URL = '/static/'

  3. 在您的模板中,對網址進行硬編碼(例如/static/my_app/myexample.jpg或者最好使用靜態模板標簽通過配置的STATICFILES_STORAGE存儲來為給定的相對路徑構建URL(這使您在需要時更加容易切換到內容分發網絡(CDN)來提供靜態文件)。

    {% load staticfiles %}

    img src="{% static "my_app/myexample.jpg" %}" alt="My image"

  4. 將您的靜態文件存儲在應用程序中名為static的文件夾中。 例如my_app/static/my_app/myimage.jpg.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM