如何在django项目中构建模板和静态文件?

时间:2015-10-16 08:56:04

标签: python html django

我对如何构建项目非常困惑,以至于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成为一个模板。所以我为它定义了一条路线,比如/appname/index.html中的urls.py,我在views.py中查看了该路线,该模板使用我需要的任何数据来渲染该模板。好的,现在我为渲染模板提供服务,它位于/appname/index.html。但这意味着它将查找该路径中的所有静态文件,例如,它将在/appname/img/cat.png而不是/static/img/cat.png查找cat图像。

当然,我可以通过我的index.html并将每条相对路径更改为绝对路径,但这并不是很好,因为那时我不得不担心如果我移动文件会发生什么周围。在我的特定情况下,我发现我使用的一些javascript动态加载了一些CSS,而且我也不想进入并编辑javascript以使用绝对路径。

那是什么? Django是不是很擅长提供静态内容,我应该使用nginx或apache代替?我知道Django应该可以作为一个完整的生产服务器,因此我不知道这里有什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您应该使用模板语言,中间件和某些配置的组合。有关如何执行此操作的说明,请访问此处 - https://docs.djangoproject.com/en/1.8/howto/static-files/

  
      
  1. 确保您的INSTALLED_APPS中包含django.contrib.staticfiles。
  2.   
  3. 在您的设置文件中,定义STATIC_URL,例如:

         

    STATIC_URL = '/static/'

  4.   
  5. 在您的模板中,要么像/static/my_app/myexample.jpg那样对网址进行硬编码,要么最好使用静态模板   使用标记来构建给定相对路径的URL   配置STATICFILES_STORAGE存储(这使它更容易   当您想切换到内容传送网络(CDN)时   提供静态文件)。

         

    {% load staticfiles %}

         

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

  6.   
  7. 将静态文件存储在应用中名为static的文件夹中。例如my_app/static/my_app/myimage.jpg.

  8.