【问题标题】:How to get django static files in app directory?如何在应用目录中获取 django 静态文件?
【发布时间】:2020-06-12 17:32:30
【问题描述】:

我对访问django的静态文件有些疑惑。

版本:1.8.4
settings.py 中的 VAR:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            # insert your TEMPLATE_DIRS here
            # os.path.join(BASE_DIR, 'templates').replace('\\', '/')
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
                # list if you haven't customized them:
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  1. 设置 STATICFILES_DIRS,并将 django.template.context_processors.static 添加到 TEMPLATES 中的 context_processors,因此我可以在模板中使用“静态”标签。像:src="{{STATIC_URL}}js/example.js"src="{% static 'js/example.js' %}" 这样的 src 标签将生成一个指向 http://myhost/static/js/example.js 的 url。

  2. 如果我想在 app 目录中加载静态文件,我应该怎么做?根据我对 django-official-doc 的理解,
    STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'django.contrib.staticfiles.finders.FileSystemFinder', )
    默认情况下,查找器将搜索app/static,但如果app/templates/index.html 中的src="static/js/example.js",服务器将返回404 代码。直到我将urlpatterns += staticfiles_urlpatterns() 添加到app/urls.py

我想知道的是:

  1. 为什么是 404?加载静态文件表单时app/static 不带urlpatterns += staticfiles_urlpatterns()

  2. 如果我想在app/static中获取静态文件,如何灵活编写url?因为{{STATIC_URL}}{% static %} 都指向项目/静态。

我花了几个小时阅读有关 stackoverflow 的相关帖子。非常感谢任何帮助。

【问题讨论】:

标签: python django


【解决方案1】:

在您的项目中添加以下代码settings.py

STATIC_URL = '/public/static/'
STATICFILES_DIRS = (
    location('static'),
)
STATIC_ROOT = location('public/static')

那么你应该能够访问 url 中的内容,例如:

http://127.0.0.1:8000/public/static/js/bootstrap.min.js

假设您有一个名为 MyProject 的项目 前提是您必须有一个名为

的文件夹

Myproject->public->static->js->bootstrap.min.js

在您的项目目录中。

在您的网页中,您可以简单地通过以下方式引用它:

<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">

希望这个想法很清楚。如有疑问,请回复。

【讨论】:

  • 位置未定义;如果我得到另一个带有静态子目录的应用程序,你确定这会工作吗?
  • 无需在您的每个应用程序中放置静态目录。仅将静态目录保留在 MyProject 命名目录中。如何访问我已经分享了。试一试,只有你会感激。:)
  • 我很清楚将所有静态文件放在 PROJ_DIR/static 中。但是如果将静态文件分发到每个应用程序的子目录中,怎么办?就像 wagtail,一个基于 django 的 cms。我想了解它是如何工作的,即使不以这种方式使用。
  • 我不明白为什么你需要这样做。当您可以将所有东西都保存在一个地方时,也不会乱七八糟,因为您可以在静态内部创建子目录,也可以使用您想要的名称,例如您的应用程序名称,.反正继续努力。如果你找到一些东西也请在这里发帖,因为到目前为止我还没有参与任何有这种要求的项目。
猜你喜欢
  • 2014-05-05
  • 2015-02-05
  • 2015-08-28
  • 2013-10-22
  • 2013-01-10
  • 1970-01-01
  • 2020-12-11
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多