【问题标题】:Styles are not displayed不显示样式
【发布时间】:2014-05-09 01:33:04
【问题描述】:

我的着陆样式有问题。我不知道发生了什么,因为早期的工作。

使用网站的文件,我在“静态”。 使用的文件,例如 django 管理面板 - 在“staticfiles”中

我的 settings.py 文件,在静态文件部分:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

TEMPLATE_DIRS = (
     join (base_dir, 'templates'),
)

STATICFILES_DIRS = (
     join (base_dir, 'static')
)

STATIC_URL = '/static/'

STATIC_ROOT = (
     join (base_dir, 'staticfiles')
)

HTML 代码,base.html。这是我的主页:

<!DOCTYPE html>
<html>
<head>
    <title>Test site</title>
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/css/main.css">
</head>

<body>
    <div class="container">
    {% block nav %}
      <div class="header">
        <ul class="nav nav-pills pull-right">
          <li {% if request.path == '/' %} class="active" {% endif %}>
              <a href="/">Home</a>
          </li>
            {% if user.is_authenticated %}
          <li{% if request.path == '/elist/'%} class="active" {%endif%}>
              <a href="{% url 'emaillist' %}">E-mail list</a>
          </li>
            {% endif %}
          <li{% if request.path == '/contact/' %} class="active" {% endif %}>
              <a href="{% url 'contact1' %}">Contact</a>
          </li>
        </ul>
        <h3 class="text-muted"><a href="/">Name site</a></h3>
      </div>
    {% endblock %}

    {% block header %}
      <div class="jumbotron">
        <h1>Soon we go!</h1>
        <p class="lead">Landing page.</p>
      </div>
    {% endblock %}

    {% block content %}{% endblock %}

    {% block footer %}{% endblock %}

    </div>
  </body>
</html>

【问题讨论】:

  • STATIC_URL = '/ static /' 可能是static前后空格的原因?
  • 为什么STATIC_URL 的斜线和静态之间有空格?编辑:呸,骗子,waldek_c 打败了我。
  • @waldek_c 不,这不是问题。
  • 好的,第二次尝试:{% load staticfiles %} &lt;link href="{% static "css/bootstrap.min.css" %} ...&gt; 如果是 django 1.4+,如 [stackoverflow.com/questions/11683748/…
  • @waldek_c 它是 django 1.6.2,但是这个解决方案不起作用。也许是 STATIC_URL 或 STATIC_ROOT?

标签: javascript django templates django-staticfiles


【解决方案1】:
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR,'staticfiles'), # if you name your static files folder as "staticfiles"
)

现在在模板中包含静态文件

<link rel="stylesheet" type="text/css" href="{% static 'css/main.min.css' %}" />        
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>

【讨论】:

  • 如果您希望在 和其他此类标签中使用静态文件,请将其添加到 html 文件的顶部 {% load static %} ..
【解决方案2】:

这看起来不太好:

STATIC_ROOT = (
     join (base_dir, 'staticfiles')
)

这个变量应该是一个字符串,而不是一个元组,像这样:

STATIC_ROOT = join(base_dir, 'staticfiles')

但我认为您可能想要这样做:

STATICFILES_DIRS = (
    join(base_dir, 'staticfiles')
)

确保base_dir 是绝对路径,并且staticfiles/css/main.css 确实相对于它存在。

由于您使用的是 Django 1.6,因此最好使用 {% static 'css/main.css' %} 而不是 {{ STATIC_URL }}/css/main.css。为此,您必须在文件的前面执行{% load staticfiles %},最好靠近顶部。

documentation 很好地解释了这些变量之间的区别。简而言之:

  • 在开发过程中,如果您在 INSTALLED_APPS 中有 django.contrib.staticfiles,那么 Django 将在您的应用程序的 static 目录中发现静态文件并从那里提供它们。
  • 您可以使用 STATICFILES_DIRS 指定 Django 应在其中查找静态文件的其他目录。
  • STATIC_ROOT 是在部署中使用的东西,当 DEBUG=False 时。这应该是文件系统中的绝对路径,您的网络服务器(如 Apache)使用的路径(不是 Django 的内置开发服务器)。当你运行python manage.py collectstatic 时,Django 会收集你项目中的所有静态文件并将它们复制到这个公共位置。
  • STATIC_URL 是静态文件的基本 URL。通常/static/。在部署中,这个 URL 不会由 Django 提供,而是直接由 Web 服务器提供,来自STATIC_ROOT 的位置。

【讨论】:

  • 最好为 STATIC_URL 和 STATIC_ROOT 设置一个“静态”文件夹?
  • @Mariusz 我添加了关于这些变量的更多解释。
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多