2015-10-16 86 views
0

我在如何構建我的項目,使得HTML文件的相對路徑工作很困惑。舉例來說,假設我有index.html,並在其中,我有一個形象。我有一個名爲img的圖片文件夾,並在裏面我有cat.png如何在django項目中構建模板和靜態文件?

所以,我的index.html裏面,我有<img src='img/cat.png'>。現在,所有這些文件都在我的項目的static文件夾中,其中STATIC_URL='/static/',因此它們得到靜態服務,並且效果很好:由於index.html在/static/中,因此發現img/cat.png沒有問題。

但這裏有一個問題:

比方說,我想打的index.html的模板。所以我爲它定義了一條路線,例如/appname/index.htmlurls.py,我在views.py中爲該路線製作了一個視圖,該視圖使用我需要的任何數據來呈現該模板。太棒了,現在我提供了這個模板,它的位置是/appname/index.html。但是,這意味着它將尋找在這條道路所有這些靜態文件,因此,例如,它會尋找貓的形象在/appname/img/cat.png而不是/static/img/cat.png

當然,我可以通過我的index.html並將每條相對路徑更改爲絕對路徑,但這並不好,因爲那樣我就不必擔心如果我移動文件會發生什麼情況。在我的具體情況,我發現一些javascript我使用負載一些CSS動態的,我不想去和編輯JavaScript來都使用絕對路徑,以及。

那又怎麼樣? Django在提供靜態內容方面不好,我應該使用nginx或apache來代替它?我知道Django應該能夠作爲一個完整的生產服務器,所以我不知道這裏有什麼。有什麼想法嗎?

回答

0

您應該使用模板語言,中間件和一些配置的組合。路線指南如何做到這一點可以在這裏找到 - https://docs.djangoproject.com/en/1.8/howto/static-files/

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

    STATIC_URL = '/static/'

  3. 在你的模板,無論是硬編碼的URL像/static/my_app/myexample.jpg或者最好使用靜態模板 標籤建立網址通過使用配置爲STATICFILES_STORAGE存儲的 給定的相對路徑(當您想要爲服務於靜態文件的 切換到內容交付網絡(CDN)時,這使得它更容易 )。

    {% load staticfiles %}

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

  4. 一個儲存在你的應用程序稱爲靜態文件夾中的靜態文件。例如my_app/static/my_app/myimage.jpg.

相關問題