【问题标题】:Using Django developers server is not displaying styles or favico使用 Django 开发人员服务器不显示样式或 favicon
【发布时间】:2011-12-09 20:22:22
【问题描述】:

我似乎遇到了某种可能与免费 Django 开发服务器 (manage.py runserver) 相关的渲染问题。我有一个 base.html 也扩展了我的其他文件。 Base 文件使用外部 CSS 文件进行格式化。当请求拉出页面时,CSS 表中定义的格式不会显示在页面上,但来自基础的所有代码都已正确扩展到文件。所以为了清楚起见,我从浏览器中打开了一个不显示格式的页面的源代码。我验证了我希望看到的所有代码是否从基础扩展,包括对 css 文件的调用。然后我从“查看源代码”窗口复制并粘贴到一个带有 html 扩展名的新文本文件中,并保存在与基本目录相同的目录中。然后,不使用服务器,我只是在浏览器中打开文件(双击它),所有的格式都在那里。地址栏和选项卡区域中使用的“favico”图标也是如此。我可以从浏览器复制文本并保存并重新打开而不使用服务器并显示图标...我做错了什么?

还要清楚没有错误消息只是没有格式。运行服务器时显示的是没有格式的页面文本......所以背景是白色的,没有颜色,没有字体格式,只是默认的 html 格式。

urls.py 可能是我的问题所在。该站点将网页内容从数据库中提取出来,并将其发送到一个通用的 html 文件,然后该文件将填充页面内容。通用 html 文件 (view.html) 从基础扩展而来,基础由外部 CSS 文件格式化。所以这些页面实际上并不是独立存在的。

在views.py中它的工作方式基本上是基于3个URLS,查看、编辑、保存。

  • 如果 URL 不存在,则 views.py 文件调用 edit.html 打开一个带有输入区域的窗口,我可以在其中添加 我的代码。然后我点击保存按钮和所有文本内容 实际上 HTML 代码被保存到数据库中。
  • 如果数据库中确实存在页面名称,则提取该页面的内容并将其发送到 View.html。

再次明确,这一切正常。查看源代码的浏览器功能显示了我想要的所有信息,我可以将其复制并粘贴到另一个文件中,它可以工作。

这里是 URLS.PY 相关的行...

  url(r'^NWTACOL/page/(?P<page_name>[^/]*)/edit/$', 'NWTACOL.page.views.edit_page'),
  url(r'^NWTACOL/page/(?P<page_name>[^/]*)/save/$', 'NWTACOL.page.views.save_page'),
  url(r'^NWTACOL/page/(?P<page_name>[^/]*)/$', 'NWTACOL.page.views.view_page'),

媒体 URL 设置为空(我仍在学习,我相信我在任何培训中都没有遇到过这个设置。我现在会去阅读)

MEDIA_URL = ''

我的css文件的链接是

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

【问题讨论】:

  • 请编辑您的问题并发布相关的 urls.py、您的 MEDIA_URL 设置以及您用于链接到您的 css 文件的 标签。

标签: django


【解决方案1】:

我还假设您使用的是 Django 1.3,因为新用户经常被新的静态文件实现绊倒:

首先,在您的settings.py 中同时指定STATIC_URLSTATIC_ROOT。通常的方式是:

import os.path

STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')
STATIC_URL = '/static/'

如果您的所有静态资源都位于一个或多个应用程序的“静态”目录中,那么您就完成了。当DEBUG=True 时,Django 会自动在STATIC_URL 为您提供这些服务。

但是,如果您在另一个目录中存储静态文件(例如用于站点范围模板的 CSS,它不仅仅适用于一个应用程序)。您必须告诉 Django 将这些其他目录视为 staticfiles 目录:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'assets'),
)

我在这里选择了“资产”,因为您不能为此使用MEDIA_ROOT 的目录(通常是“site_media”)。 MEDIA_ROOTMEDIA_URL 现在仅用于上传。

此外,您也不能将文件存储在STATIC_ROOT 中。这似乎违反直觉,但STATIC_ROOT 只是运行collectstatic 管理命令时Django 存储文件的目录。它实际上从未从这里提供文件,因为这是您的生产网络服务器应该做的事情。

因此,总而言之,您可能需要三个静态资源目录:

  1. 用户上传的目录(MEDIA_ROOT,通常是“site_media”)
  2. collectstatic 的目录('STATIC_ROOT`,通常是“静态”)
  3. 项目范围的静态文件的目录(在 STATICFILES_DIRS,随便叫什么)

最后,您可能最终也会被服务管理媒体绊倒。设置是:

ADMIN_MEDIA_PREFIX = STATIC_URL+'admin/'

【讨论】:

  • 对不起,我是新手,只是在学习,这让我很困惑。我试过你所说的,但我显然做错了。所以这就是我在项目目录中的内容,当然还有由 startapp 函数最初设置的页面 DIR。然后我在项目根目录中也有一个图像目录和一个 HTML 目录,而不是在页面目录下。那么首先你可以在 STATIC_ROOT 中拥有多个东西吗?
  • 虽然您的目录名称在技术上 并不重要,但最好遵循约定,因此有一个共同的参考框架。模板(您的 HTML)应该放在项目根目录中的“模板”目录中,每个应用程序的目录与该应用程序在其中的目录相同。 (您的应用程序中也可以有“模板”目录)。图像和其他静态资源应放入包含文件夹(“[project_root]/[app]/static/”或类似“[project_root]/assets/”的文件夹)。然后您可以为图像、javscript、CSS 等创建文件夹. 里面。
  • 好的,所以在我让它工作后我会改变它以保持一致,因为基本上我就是这样用不同的名字。我退后了一步,因为如果我能让 favico 工作,那么其余的我就可以工作。在任何情况下,我将如何让它出现?我的 settings.py 有 TEMPLAT_DIRS 和 STATICFILES_DIRS = ( "D:/web dev/NWTACOL/html",...) 并且在那个目录中我有所有的 HTML 和 favico 和 base.html 图标的链接是
  • 那是你的问题。您需要在模板中使用STATIC_URL,即:&lt;link rel="shortcut icon" href="{{ STATIC_URL }}favicon.ico"/&gt;
  • 哦,我之前有过,但在尝试查找不同的错字时将其删除...让我们看看这是否有效...不,仍然没有出现。
【解决方案2】:

您使用的是静态文件应用程序和 Django 1.3 吗?它应该自动在路径上提供 css、js、图像等:/static,如果你有 DEBUG = True。如果没有,您需要提供自己的 url 模式和视图以提供静态媒体。

https://docs.djangoproject.com/en/1.3/ref/contrib/staticfiles/查看dos

【讨论】:

  • 是的,我正在运行最新的 1.3 版本
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 2012-02-12
  • 2018-06-09
  • 2013-10-23
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2018-09-24
相关资源
最近更新 更多