如何将我自己的文件添加到django'static'文件夹中

时间:2014-12-24 17:19:03

标签: python django

我已阅读django static files document并制作了像我这样的django静态文件设置

setting.py

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, 'static')
STATIC_URL = '/static/'

html页面

<img src="{% static "admin/img/author.jpg" %}" alt="My image"/>

因此,如果我解决django默认静态文件之一,它可以正常工作。但是,如果我将自己的文件和文件夹添加到static文件夹,则不会显示它。

我试过

python manage.py collectstatic

但没有改变。我怎样才能使它发挥作用?

4 个答案:

答案 0 :(得分:4)

一些事情......

STATICFILES_DIRS = (
    'path/to/files/in/development',
)

STATIC_ROOT = 'path/where/static/files/are/collected/in/production'

DEBUG = True时,当您使用STATICFILES_DIRS模板标记时,Django会自动提供位于{% static 'path/to/file' %}内任意目录中的文件。

DEBUG = False时,Django将自动提供任何文件,并且您需要使用Apache,Nginx等从STATIC_ROOT中指定的位置提供这些文件

当您运行$ manage.py collectstatic时,Django将复制STATICFILES_DIRS中的所有文件以及任何名为&#39; static&#39;的目录中的文件。在第三方应用中,进入STATIC_ROOT指定的位置。

我通常构建我的项目根目录:

my_project/
    /static_assets/  (specified in STATICFILES_DIRS)
        /js
        /images

    /static (specified in STATIC_ROOT)

我希望这可以帮助您了解staticfiles应用程序的工作原理。

答案 1 :(得分:1)

STATIC_ROOT是收集文件并在collectstatic运行时移动到的位置。

如果您希望将文件合并到那里,可以通过static file finder找到它们。

例如,在您的设置中包含以下内容

STATICFILES_FINDERS = ("django.contrib.staticfiles.finders.FileSystemFinder",
 "django.contrib.staticfiles.finders.AppDirectoriesFinder")

现在,对于属于您项目的其中一个应用,请创建一个名为static的文件夹并在其中添加内容。

当您运行collectstatic时,您会看到提到的文件并将其复制到STATIC_ROOT

答案 2 :(得分:1)

您可以尝试添加

STATICFILES_DIRS = (
    STATIC_PATH,
)

settings.py

此外,如果您还没有,请确保包含

{% load static from staticfiles %}

在您希望引用静态文件的每个模板中。

最后,请确保您引用的文件确实存在且文件路径正确。

答案 3 :(得分:-2)

尝试:

<img src="{{ STATIC_URL }}admin/img/author.jpg" alt="My image"/>

在你看来,必须是这样的:

...
from django.shortcuts import render_to_response
from django.conf import settings

def my_view(request):
    ...
    static_url = getattr(settings, 'STATIC_URL')
    ...
    return render_to_response(
        template_name,
        RequestContext(request, {
            'STATIC_URL': static_url,
        }))