Django:CSS 不工作

Posted

技术标签:

【中文标题】Django:CSS 不工作【英文标题】:Django: CSS Is not not working 【发布时间】:2012-11-06 22:24:25 【问题描述】:

我还是 django 的新手,我的 CSS 工作有问题。 我遵循了链接中的指示:Django Static Link tutorial,关于处理静态文件。但它仍然无法正常工作。

设置

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = '/Users/a9austin/Development/sites/AlphaSocks/src/static_root/'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/Users/a9austin/Development/sites/AlphaSocks/src/staticfiles'

)

查看

#from django.http import HttpResponse
from django.shortcuts import render_to_response


def index(request):
return render_to_response('index.html')

index.html

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

和目录组织

src->staticfiles->css->style.css

非常感谢您,非常感谢您的帮助和时间!

【问题讨论】:

“什么”不起作用?如何使用 render() 或 render_to_response() 渲染视图? settings.py 中是否开启了静态文件上下文处理器? 是的,我正在使用 render_to_response,我会用我的视图更新它。它不起作用的 css 实际上并没有改变我的 html。 看这个post来处理静态文件 @OtskimanotSqilal 感谢您的回复,我刚刚用我的 STATICFILES_DIR 更新了它,我的 css 仍然没有出现。 你配置STATICFILES_DIRSSTATIC_ROOT的方式不对。它们不能包含相同的目录。请参阅我的答案以获取更多信息。 【参考方案1】:

要让 Django 提供静态文件,您必须确保有几个设置。

STATIC_URL

此设置指定静态文件应映射到哪个 url。你已经完成了。

STATICFILES_DIRS

这指定了 Django 应该在其中查找静态文件的系统上的所有文件夹。这个想法是您的项目中可能有几个应用程序,每个应用程序可能需要一组不同的静态文件。因此,出于组织目的,每个应用程序可能包含一个static 目录,它将仅存储它的静态文件。所以 Django 必须有办法知道这些目录在哪里。这就是此设置的用途。

STATIC_ROOT

此设置指定 Django 将所有静态文件复制到哪里,而不是静态文件已经在哪里。这个想法是,一旦你将开发投入生产,Django 就不能再提供静态文件了,因为我不会去这里(它在 article 中)。但是对于生产,所有静态文件都应该在一个目录中,而不是在STATICFILES_DIRS 中指定的许多目录中。所以这个设置指定了一个目录,Django 将通过运行以下命令从STATICFILES_DIRS 内的所有文件中复制所有静态文件到该目录:

$ python manage.py collectstatic

请注意,这仅在您投入生产后才需要,而且此处指定的目录不能与STATICFILES_DIRS 中指定的任何目录相同。

Urls.py

在为 Django 提供静态文件服务的开发过程中,您必须在 urls.py 中包含静态 url:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = ...

urlpatterns += staticfiles_urlpatterns()

一旦您完成了上述所有事情,只要您拥有DEBUG = True,就应该提供您的静态文件。在上面的列表中,您似乎只完成了STATIC_URL。另请注意,我上面描述的所有步骤都在您在问题中链接的文档中 (link)。一开始可能会有点混乱,但如果你读了几次,它就会变得更加清晰。

【讨论】:

感谢您的回复。让我确保我理解。所以 STATICFILES_DIR 实际上是静态文件所在的位置。 STATIC_ROOT 是 python 复制/处理它们的地方? 是的,但它只会通过运行manage.py 命令来复制它们,并且仅用于生产。在开发中,Django 将查找并提供位于STATICFILES_DIRS 中任何目录中的静态文件。另外我忘了提一下,在视图中确保您使用RequestContext 才能使用 STATIC_URL 。 Kavanaugh Development 的回答表明了这一点。 好的,所以当我调用 python manage.py collectstatic 时,它给了我一个错误。 '"您的 STATICFILES_DIRS 设置不是元组或列表;" django.core.exceptions.ImproperlyConfigured:您的 STATICFILES_DIRS 设置不是元组或列表;也许你忘了一个逗号?我将帖子更新为我更改了根目录和目录的内容。请看一下。再次感谢您帮助我 对。所以你的STATICFILES_DIRS 就像( 'string_here' ) 这不是一个元组。将其更改为( 'string_here', ),这是一个 Python 元组。 但同样,对于开发,您不必收集所有静态文件。 Django 将直接从STATICFILES_DIRS 目录为它们提供服务...【参考方案2】:

将 RequestContext 添加到响应应将 STATIC_URL 变量加载到模板中。

尝试改变:

from django.shortcuts import render_to_response

def index(request):
    return render_to_response('index.html')

到:

from django.shortcuts import render_to_response
from django.template.context import RequestContext

def index(request):
    return render_to_response("index.html", context_instance=RequestContext(request))

有关更多信息,请参阅Referring to static files in templates 上的 Django 文档。

【讨论】:

【参考方案3】:
There is an easy way if you feel that your CSS isn't working.

如果您的项目不是太大,那么您可以制作 CSS 文件与 HTML 位于同一文件中。 然后运行它。这样它就会运行例如

`

<head>
  <meta charset="UTF-8">
  <title>Promantus Bot</title>
      <style type="text/css"> 
* 
    margin: 0;
    padding: 0;


body 
    background-color:#FF625F;


h1, p 
    font-family: sans-serif;
    text-align: center;
    color: #323330;
    font-size:  100px;



p 
    font-size: 30px;


#output, #container 
    display: flex;
    justify-content: center;
    margin-top: 100px;



input 
    background-color: #eee;
    border: none;
    font-family: sans-serif;
    color: #000;
    padding: 15px 32px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 30px;







</style>


</head>

<body>

  <div id="output"></div>

<div id="container">
    <input type="text" id="input" value="">
</div>





</body>

</html>
`
It's going to run fine this way.

【讨论】:

【参考方案4】:

完成所有操作后,设置DEBUG= True,python collectstatic,清除缓存,如果问题仍然存在则以隐身模式打开将您的.css文件复制到静态文件夹中的另一个新.css文件中,然后运行collectstatic命令。这对我有用。 我希望这会对你有所帮助。

【讨论】:

【参考方案5】:

尝试清除缓存。如果您使用的是谷歌浏览器,请转到您的设置>清除浏览数据>选择清除缓存的图像和文件,然后单击清除数据

【讨论】:

【参考方案6】:

如果编码没有问题并且没有显示错误。 然后你可以这样做来尝试解决问题。

清除缓存:

如果您使用的是谷歌浏览器,请转到您的设置 --> 清除浏览数据 --> 选择清除缓存的图像和文件,然后单击清除数据

【讨论】:

【参考方案7】:

如果您在开发模式下发生这种情况,请确保您在 settings.py 文件中设置了 DEBUG=True。还要确保 MEDIA_URLMEDIA_ROOT 在您的 settings.py 文件中设置,如下所示:

MEDIA_URL  = '/mymediafolder/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mymediafolder')

然后在您的主网址文件myapp/urls.py 中,您必须具有以下内容:

from django.conf.urls import url, include
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    #Your url patterns here
]

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

staticfiles_urlpatterns() 用于在开发模式下提供静态文件。

【讨论】:

【参考方案8】:

对我来说它正在改变

&lt;link rel="stylesheet" href=" % static '/css/style.css' % "&gt;

&lt;link rel="stylesheet" type="text/css" href=" % static '/css/style.css' % "&gt;

【讨论】:

【参考方案9】:

有时只需要“Ctrl + F5”

完全刷新页面,就行了。

或 Ctrl + Shift + R

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review

以上是关于Django:CSS 不工作的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin 通过 apache 破坏了 CSS 链接,但在 runserver 模式下工作

有没有办法让 flexbox 与 Django 一起工作?

CSS没有在Django项目中加载?

我在 cpanel 上的 django 网站没有加载我的媒体文件(从管理员上传的图像)但是当 DEBUG=False 时我的所有 stacticfiles(css 等)都可以工作

用于 Django 中动态内容的 CSS Grid/Flexbox

Django静态图像不显示