2013-03-07 176 views
1

我查看了无数的答案和试图找到一个明确的指南或方法来做到这一点的问题,但似乎每个人都有不同的方式。有人可以请向我解释如何在模板中提供静态文件?Django静态设置

假设我刚刚用Django 1.4创建了一个全新的项目,我需要做什么才能呈现图像?我应该在哪里放置媒体和静态文件夹?

+0

没有用,但我觉得你的痛苦。我觉得它应该很简单,但是我不了解的基本理解之间肯定存在根本的差距。我不清楚媒体和静态之间的区别是什么,除了用户上传之外的其他内容。 – user798719 2013-03-16 18:28:03

+0

@ user798719其实我想清楚了,一旦你第一次把它弄明白就很简单。 STATIC_ROOT是所有的静态文件获取收集在目录中。 STATIC_URL是url静态文件将可在(例如) MEDIA_ROOT是路径目录下的所有用户上传文件会 – 2013-03-17 02:16:00

+0

@ user798719 STATIC_ROOT是您收集的所有静态文件的目录。 STATIC_URL是静态文件将可用的URL(例如) MEDIA_ROOT是所有用户上载文件将转到的目录的路径 MEDIA_URL与STATIC_URL,只是对uri的引用,这些文件将在 上可用STATICFILES_DIRS是一个元组,路径为所有文件的存储位置d之前收集部署然而,你不能STATICFILES_DIR STATIC_ROOT或它会抛出一个错误! – 2013-03-17 02:21:50

回答

2
  1. 把你静态文件为<app>/static或添加到STATICFILES_DIRS
  2. 绝对路径配置Web服务器(你不应该成为静态文件Django的)文件服务解决方案在STATIC_ROOT
  3. STATIC_URL基础网址的web服务器提供
  4. 运行./manage.py collectstatic
  5. 请务必使用RequestContext在渲染调用和{{ STATIC_URL }}到前缀路径
  6. 咖啡和拍拍自己的背

多一点点关于运行在Django的前一个Web服务器。 Django实际上是一个应用程序服务器。它的设计目的并不在于提供静态文件。这就是为什么当DEBUG=False积极拒绝这样做。另外,Django开发服务器不应该用于生产。这意味着在任何时候都应该在Django前面有一些东西。它可能是一个WSGI服务器,例如gunicorn或一个'真实'的网络服务器,如nginx或Apache。

如果您运行的是反向代理(例如nginx或Apache),则可以将/static绑定到文件系统中的路径以及其他流量传递给Django。这意味着您的STATIC_URL可以是相对路径。否则,您将需要使用绝对URL。

0

创建的项目应该有一个静态文件夹。将所有资源(图像,...)放在那里。 然后,在你的HTML模板,你可以参考STATIC_ROOT并添加资源路径(相对于静态的文件夹)

0

下面是官方文档:

如何管理静态文件:https://docs.djangoproject.com/en/1.4/howto/static-files/

静在一般的文件:https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/

如果您打算在生产型环境中部署,那么你应该在这里阅读部分:https://docs.djangoproject.com/en/1.4/howto/static-files/#staticfiles-production

一般来说,你把我们的静态和媒体文件夹中的Django项目应用程序之外

+0

出于好奇,为什么把静态文件放在应用程序之外? – 2013-03-08 00:35:00

+0

呈现HTML和与数据库交谈是一个完全独立的服务文件集问题。 Django本身并不试图成为一个完美的Web服务器,恰恰相反:它是一个WSGI应用程序,需要一种或另一种类型的前端。 './manage.py runserver'仅用于开发。 – ferrix 2013-03-08 14:59:45

0
  • 在设置中定义STATICFILES_DIRS,STATIC和MEDIA路径。
  • 在模板文件夹,urls.py,settings.py等等旁边创建静态文件文件夹...
  • 您不必创建媒体文件夹,因为它会在您上传图像时自动创建。
  • 在URLconf把这个一个:

    from django.conf.urls import patterns, include, url 
    from django.contrib import admin 
    from django.conf import settings 
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
    from django.conf.urls.static import static 
    
    admin.autodiscover() 
    
    urlpatterns = patterns('', 
        ............. 
    ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
    
    urlpatterns += staticfiles_urlpatterns() 
    
  • 模板:

    {% load static %} 
    <img src="{% static 'images.png' %}"> 
    <img src="{{MEDIA_URL}}images.png"> 
    
+0

这将工作,但Django将提供文档不鼓励的文件。 – ferrix 2013-03-08 14:54:08

+0

Django 1.4正在使用{%load static%}。 Django 1.5正在使用来自staticfiles%的{%load static}。如果您想使用旧的{{STATIC_URL}},则可以选择 – catherine 2013-03-08 15:02:54

+0

这使得媒体文件夹中的图像可以正常工作,但仍然没有运行静态文件夹。 – 2013-03-08 15:59:35