![](/img/trans.png)
[英]TemplateDoesNotExist. loading static files and templates Django project structure
[英]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/
- 確保django.contrib.staticfiles包含在INSTALLED_APPS中。
在您的設置文件中,定義
STATIC_URL
,例如:
STATIC_URL = '/static/'
在您的模板中,對網址進行硬編碼(例如
/static/my_app/myexample.jpg
或者最好使用靜態模板標簽通過配置的STATICFILES_STORAGE
存儲來為給定的相對路徑構建URL(這使您在需要時更加容易切換到內容分發網絡(CDN)來提供靜態文件)。
{% load staticfiles %}
img src="{% static "my_app/myexample.jpg" %}" alt="My image"
將您的靜態文件存儲在應用程序中名為static的文件夾中。 例如
my_app/static/my_app/myimage.jpg.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.