【问题标题】:Static Files With Django 1.6Django 1.6 的静态文件
【发布时间】:2013-11-29 13:31:26
【问题描述】:

我花了一整天,没有任何效果。我在这里看到了至少 20 篇关于同一主题的帖子,它们因不同的建议而有所不同,对我来说没有任何用处。 使用 Python 2.7.+ 运行 Django 1.6 我正在尝试从 django 教程中加载民意调查应用程序的 css。

项目布局

Project
   |-polls
       |-static
           |-polls
                style.css
   |static

这里是settings.py

STATIC_URL = '/static/'
STATIC_ROOT = '/home/bri6ko/DjangoProjects/django1.6/PoolsDjangoProject/static'

模板代码

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

urls.py

urlpatterns = patterns(...)+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

投票/urls.py

urlpatterns = patterns(....,url(r'^static/(?P<path>.*)$', 'django.views.static.serve',                                        {'document_root': '/home/bri6ko/DjangoProjects/django1.6/PoolsDjangoProject/'}),)

运行后:python manage.py collectstatic,所有东西都被收集起来,根目录下的静态文件夹会相应地填充管理员和轮询文件夹和文件。

我启动服务器:python manage.py runserver 一切正常,除了 css 没有加载

这是我在检查 html 时从 Chrome 控制台得到的结果

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

看起来不错,但输出如下

[16/Nov/2013 00:44:41] "GET / HTTP/1.1" 404 2141
[16/Nov/2013 00:44:45] "GET /polls/ HTTP/1.1" 200 820
[16/Nov/2013 00:44:45] "GET /static/polls/style.css HTTP/1.1" 404 1649

任何帮助将不胜感激。我一步一步地跟着一切。我不知道该怎么办了

更新

DEBUG=True

完整的 urls.py

from django.conf.urls import patterns, include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin
from PoolsDjangoProject import settings
from django.conf.urls.static import static

admin.autodiscover()

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'PoolsDjangoProject.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^polls/', include('polls.urls', namespace='polls')),
url(r'^admin/', include(admin.site.urls)),
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

完整的投票/urls.py

从 django.conf.urls 导入模式,url 导入视图

urlpatterns = patterns('',
                   url(r'^$', views.IndexView.as_view(), name='index'),
                   url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
                   url(r'^(?P<pk>\d+)/results/$',     views.ResultsView.as_view(),name='results'),
                   url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote', name='votes'),
                   url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
                                    {'document_root':       '/home/bri6ko/DjangoProjects/django1.6/PoolsDjangoProject/'}),
)

当我尝试访问时

http://127.0.0.1:8000/static/polls/style.css

我明白了

Page not found (404)
'polls/style.css' could not be found

【问题讨论】:

  • 如果您在浏览器中请求 css 页面,django 会显示什么错误消息(完整)?
  • DEBUG 是真是假?
  • 发布您的整个 urls 文件 - 看起来您可能错过了使用 devserver 提供静态文件的设置
  • 将“polls/urls.py”静态模式移动到“urls.py”并重启django服务器;也执行manage.py collectstatic
  • 您的STATIC_ROOT 缺少尾部斜杠

标签: django file css python-2.7 static


【解决方案1】:

按照中的步骤操作后,我发现有必要重新启动正在运行的服务器

https://docs.djangoproject.com/en/1.6/intro/tutorial06/#customize-your-app-s-look-and-feel

为了获取新创建的静态目录。该步骤未在教程中列出。我已经打开了一张请求添加它的票。

我意识到这个答案不太可能对您的具体案例有所帮助,但是在搜索将静态目录添加到示例民意调查应用程序的问题时,这个问题在 Google 中很突出。

【讨论】:

  • 感谢 Sean,这有助于并感谢您打开票证。 Django 的人将通过阐明这一点来帮助很多人。 Django 已经足够具有挑战性了 :-)
  • 谢谢肖恩,它真的帮助了我!
  • 我在使用 1.8 版教程时遇到了同样的问题。教程中仍然没有提到重启服务器。
  • 无论如何,这在将近 4 年后的 2.0 版教程中仍未得到解决。
【解决方案2】:

我也遇到了这个问题。我的问题是我在安装的应用程序中没有我的 main 应用程序,无论其中包含 wsgi.py 的任何文件夹,都需要在 INSTALLED_APPS 中。

【讨论】:

  • 这确实对我解决这个问题的尝试产生了巨大的影响。谢谢
  • 这对我有用。你能解释一下为什么我们必须将主应用程序添加到 INSTALLED_APPS 中吗?教程没有说要这样做。
  • 我真的不知道。我主要是反复试验,直到我得到它做我想做的事情。
【解决方案3】:

我也遇到过这个问题。

这是我解决它的方法 (DEBUG=True):

  1. 创建一个项目和几个应用程序后,我创建了一个名为“static”的目录,它位于我的应用程序目录旁边(与 .manage.py 级别相同)。
  2. 我在设置中将我的静态 URL 设置为 '/static/'
  3. 我将我的静态根设置为 STATIC_ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), '../../static/').replace('\\','/')) (BASE_DIR = os.path.dirname(os.path.dirname(__file__)))
  4. 我将我的静态文件目录设置为 STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"), '/Users/username/sites/containing_dir/project_dir/static/',)(假设 OSX 路径)
  5. 我在我的项目的 urls.py 中添加了 + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

我的静态媒体现在由 http://127.0.0.1:8000/static/css/styles.css 提供(假设 runserver 命令)。

如需补充说明请留言!

【讨论】:

  • staticfiles_dirs 有什么用?为什么直接路径是static_root的时候大家都引用呢?看来我无论如何都必须将文件从 staticfiles_dir 移动到 static_root 。
【解决方案4】:

首先必须知道 Django 不负责在生产服务器上提供静态文件。但是,为了调试,在开发过程中DEBUG=True 确实为他们服务。

为了在debug=true 时提供静态文件,您必须什么都不做。我不知道为什么它会在新手之间造成关于如何设置的困惑。下面应该可以帮助您清楚地为生产和开发模式创建静态文件

开发模式:当DEBUG=True

  1. 创建您的项目django-admin.py startproject mysite
  2. 创建您的应用程序manage.py createapp myapp
  3. 在settings.py中将myapp添加到INSTALLED_APPS
  4. 在myapp 目录中,创建一个文件夹static
  5. 在myapp/static 目录中,保存一个文件myfile.css
  6. 在 settings.py 中,为STATIC_ROOT 文件夹提供一个有效地址以存储静态文件。如果您想将收集的文件存储在mysite/mysite/mystatic,它可能类似于os.path.join(os.path.abspath(os.path.dirname(__file__)), "mystatic")。
  7. 运行manage.py collectstatic;现在您必须查看在您上面提到的目录中收集的静态文件。如果它不存在,它也应该创建一个。您可以随意放置任何目录。
  8. 测试网址http://127.0.0.1:8000/static/myfile.css
  9. 如果它还不能工作,请尝试重新启动站点。新文件无法动态识别!

【讨论】:

  • 你不需要运行collectstatic来查看dev中的静态文件。
猜你喜欢
  • 2014-03-20
  • 2013-11-22
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 2018-03-08
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多