【问题标题】:How to load CSS in Django templates?如何在 Django 模板中加载 CSS?
【发布时间】:2012-03-09 12:01:00
【问题描述】:

我在为我的 Django 模板加载 CSS 时遇到问题。

我有以下设置:

STATIC_ROOT = ''
STATIC_URL = '/css/'
STATICFILES_DIRS = ("/css")
INSTALLED_APPS = (
    'django.contrib.staticfiles',
)

我是否需要同时使用static_urlstaticfiles_dirs

urls.py 是

urlpatterns = patterns('',
    (r'^$',homefun),
)

views.py 是

def homefun(request):
    return render_to_response('home.html')

父模板是加载css的base.html。

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

【问题讨论】:

  • 我是 python/django 的新手。在 PHP 和 J2EE 中加载静态内容似乎很容易,我很惊讶所有 python 的简单性使这变得复杂。
  • 这只是关注点分离:Django 专注于提供动态内容,让您选择的网络服务器处理静态内容。然而,有时不同的应用程序(可能安装在许多不同的地方)需要提供静态内容,因此他们创建了这个静态文件应用程序来帮助解决这个问题。

标签: css django django-templates


【解决方案1】:

您的STATICFILES_DIRS = ("/css") 实际上应该是STATICFILES_DIRS = ("/path/to/your/css", )(注意尾随逗号——这是必要的,因为(eggs) 的计算结果为eggs,但尾随逗号强制它计算为一个元组)。

【讨论】:

    【解决方案2】:

    您需要在模板中使用{{ STATIC_URL }} 作为变量,如下所示:

    <link rel="stylesheet" href="{{ STATIC_URL }}style.css">
    

    Official Django documentation 对提供静态文件有很好的解释。

    必须设置STATIC_ROOT 变量。使用STATICFILES_DIRS 是可选的,默认情况下,Django 在您所有应用程序的static 目录中搜索。

    【讨论】:

      【解决方案3】:

      STATIC_URL 是您的静态媒体的 URL(对于这些请求,网络服务器将向浏览器提供静态媒体),而 STATICFILES_DIRS 是您机器中的文件夹列表(网络服务器将在其中找到文件服务)。 AFAIK 后者必须使用绝对路径,而不是相对路径,也许这就是它不适合你的原因。

      【讨论】:

        【解决方案4】:

        这个解决方案对我有用。

        我正在将代码从python2.7 转换为python3.4,转换后无法显示静态文件。

        我将script(src='#{STATIC_URL}js/libs/jquery-2.1.1.min.js') 更改为script(src='{{STATIC_URL}}js/libs/jquery-2.1.1.min.js'),现在一切正常。

        【讨论】:

          猜你喜欢
          • 2013-10-12
          • 2019-08-21
          • 2016-02-26
          • 1970-01-01
          • 2021-10-27
          • 1970-01-01
          • 1970-01-01
          • 2013-10-05
          • 2014-12-30
          相关资源
          最近更新 更多