Django找不到静态文件。需要第二双眼睛,我会发疯的

时间:2014-06-13 06:30:14

标签: python django twitter-bootstrap web static

Django不会提供我的静态文件。此处返回错误

[13/Jun/2014 06:12:09] "GET /refund/ HTTP/1.1" 200 2927
[13/Jun/2014 06:12:09] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 1667
[13/Jun/2014 06:12:09] "GET /static/css/cover.css HTTP/1.1" 404 1643
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667  
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667

这是 base.html 的相关部分,用于引导程序:

!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">

<title>Cover Template for Bootstrap</title>

<!-- Bootstrap core CSS -->
{
<link href="{% static "css/bootstrap.min.css"%}" rel="stylesheet">

<!-- Custom styles for this template -->
<link href="{% static "css/cover.css" %}" rel="stylesheet">

来自 settings.py 的相关代码(注意:模板工作得很好。)

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)

STATIC_URL = '/static/'

STATIC_ROOT = ''

以下是我的django项目的布局:

  • 管理员
  • db.sqlite3
  • 项目名称
  • manage.py
  • app name
  • 静态
    • CSS
      • ...
    • DIST
      • ...
  • 模板
    • base.html文件

任何帮助都将非常感谢。我不知道自己可能做错了什么,我已经看了一百万次代码,显然它对于我对Django如何提供静态文件的理解一定是个缺口;但是我之前没有遇到任何问题。

6 个答案:

答案 0 :(得分:31)

执行以下操作:

  1. 如果您在DEBUG中,请在settings.py中设置STATICFILES_DIRS =(&#34; path / to / static&#34;)变量。然后它应该在DEBUG模式下

  2. 如果您希望它也能在部署模式下工作,请在settings.py中设置STATIC_ROOT =(&#34; path / to / static_root&#34;)变量。然后,执行python manage.py collectstatic,它也应该有效。

  3. 现在,为了更好地理解django如何管理静态文件:

    • Django有一些预定义的地方可以查找静态文件并收集它们,您可以使用settings.py中的STATICFILES_FINDERS指定在哪里找到它们。默认情况下,它会在您的应用中查找静态文件夹 。您可以通过设置STATICFILES_DIRS变量(路径的列表或元组)来告诉Django在其他部分中查找静态文件。

    • 在DEBUG模式下,从这些路径中挑选静态文件(而不是从收集文件的static_root)。

    • 执行python manage.py collectstatic时,Django会遍历可以找到静态文件的所有目录,并将它们放在静态根目录中。在部署模式下运行时,将从此目录提供静态文件。

    PS:我通常做的是创建一个名为common的应用程序并在其中创建一个静态目录,以便为我的项目(以及模板)放置所有常见的css,js。这样,我就不必指定STATICFILES_DIRS变量。

    希望现在很清楚=)。

答案 1 :(得分:4)

嗯,刚刚完成教程,我几乎遇到了这个问题。只需重新启动Web服务即可修复它。 因此,如果只是完成了教程说明,请将目录 static // style.css 放在名为dir的目录中,同时放置

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

应该使用该css文件设计的html文件(例如 index.html )的head-section内部。

答案 2 :(得分:0)

  

更改settings.py的STATIC_ROOT,我希望它能正常工作。我面临同样的问题......

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)
STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')

STATIC_URL = '/static/'

答案 3 :(得分:0)

我在 Django 中遇到静态文件的问题 需要一天时间才能找出静态文件未加载且未在运行服务器模式下显示在我的项目中的情况。

终于找到问题所在了...

我认为这个问题是因为您的文件系统中的权限问题。 您必须获得项目中静态文件的权限,您会看到问题已解决。

在linux中你可以运行这个命令:

sudo chmod 777 <your static folder relative address> -R

答案 4 :(得分:0)

根据版本更改您的 TEMPLATE_DIRS

如果您的版本是 3.1 或以下

STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'templates'),)

如果高于 3.2

STATICFILES_DIRS = [
BASE_DIR / "static",]

检查 this link 以获得更清晰的

答案 5 :(得分:0)

python manage.py collectstatic

这个命令在我被卡住的几个小时后帮了我很多