【问题标题】:Is there a way to load file that is under templates folder on Django HTML?有没有办法加载 Django HTML 模板文件夹下的文件?
【发布时间】:2015-05-21 16:24:51
【问题描述】:

我可以像这样在 Django html 上加载 css 文件

{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/style.css" %}">

我想知道为什么我无法加载模板文件夹下的 css 文件。

<link rel="stylesheet" href="css/style.css">

有没有办法加载 Django HTML 模板文件夹下的文件?

为什么 Django 要我把 {% static "css/style.css" %} 这种格式放在所有静态文件上?是因为加载速度快得多吗?

如果我加载模板文件夹下的文件怎么办?加载速度慢吗?

【问题讨论】:

  • 尝试使用完整路径,你可以使用settings中的TEMPLATE_DIR url调用你想要的.css文件。
  • 你能给我一个完整的路径示例吗?
  • 当您投入生产时,您将在执行collectstatic 命令时从其他文件夹提供静态数据。我建议您将您的 css 文件放在静态文件夹下并使用 {% load static ... %} 标签。

标签: python django


【解决方案1】:

模板和静态资产是两种不同类型的资产,出于安全目的需要进行不同的管理。

所有 js、css 和图像文件都需要提供给客户,您的网站才能正常运行。它们是从客户端处理的,因此它们需要可用。因此静态资产文件夹可用,如果您查看查看源代码并点击这些资产的链接,您将看到它们可以直接在您的浏览器中打开。

然而,django 本身使用模板来生成通过您的视图设置的输出。当用户打开一个页面时,他访问的不是模板本身,而是 django 制作的渲染。因此,最终用户无法通过设计访问模板文件夹,包括其中的文件。因此,用户可以从 django 应用程序访问的唯一内容是视图给出的响应,这些响应基于 url 模式和模板,以及静态文件夹中的资产。因此,您不能也不应该从静态文件夹以外的任何地方链接到静态资产。

【讨论】:

    【解决方案2】:

    正如我所见,您已经错过了 Django 中模板和静态文件的概念。

    首先,有两种独立的机制:加载模板文件(您未来的 HTML 文件)和加载您的静态文件(css、js、图像)。

    在加载模板时,Django 使用TEMPLATE_LOADERS (docs),它们基本上在您的settings.py 中定义为:

    TEMPLATE_LOADERS = (
        # Loads templates from DIRS setting:
        'django.template.loaders.filesystem.Loader', 
    
        # Loads templates from your installed apps:
        'django.template.loaders.app_directories.Loader', 
    )
    

    您可以通过设置DIRS(如果您使用 Django >= 1.8)或TEMPLATE_DIR(如果 Django

    现在关于静态文件。

    DEBUG = True 时,静态文件由django.contrib.staticfiles app (docs) 提供。在生产中,它由 Nginx、Apache 或其他 Http-Server 完成。 加载静态文件时,Django 使用STATICFILES_FINDERS。它们通常定义为:

    STATICFILES_FINDERS = (
        # Loads static files from STATICFILES_DIRS:
        "django.contrib.staticfiles.finders.FileSystemFinder",
    
        # Load static files from installed apps:
        "django.contrib.staticfiles.finders.AppDirectoriesFinder"
    )
    

    有两个主要设置需要关注:STATIC_URLSTATICFILES_DIRSSTATIC_URL 基本上只是一个前缀,用于获取您的静态文件。它几乎总是只是'/static/'。在STATICFILES_DIRS 中有指向您的静态文件文件夹的路径。它有时会扩展到包括node_modulesbower_components 或类似的东西。

    在处理模板中的静态文件时,您需要将 STATIC_URL 附加到文件的 URL 中。最简单的方法是{% static %} 标签。

    STATIC_ROOT 带来了很多困惑。它只是一个路径,运行collectstatic管理命令后,您的所有静态文件都将在生产中收集。

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2017-03-22
      相关资源
      最近更新 更多