【问题标题】:Django css file not workingDjango css文件不起作用
【发布时间】:2012-09-23 08:25:42
【问题描述】:

我一直在四处寻找并尝试一切,但我似乎无法让我的 css 文件在 Django 模板中工作。 我的 css 我叫 style.css 现在模板中的代码如下所示:

{% load staticfiles %}

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

我仍在开发服务器上工作。 在设置 py 我添加: STATICFILES_DIRS = ( "home/henk-jan/website/Template/Database")

django.contrib.staticfiles 安装在 Installed_apps 中

谁能帮我解决这个问题? 干杯,亨克斯

编辑:我的模板 (index.html) 与我的 style.css 位于同一文件夹中,该文件夹为:/home/henk-jan/website/Template/Database

【问题讨论】:

    标签: html css django django-staticfiles


    【解决方案1】:

    通过查看您的原始帖子,在我看来,您正在从两个不同的角度呈现您的页面。

    首先,您有{% load staticfiles %},它将加载与静态文件模块关联的模板标签。其次,在您的链接元素中,您引用了{{ STATIC_URL }},它通过上下文进行扩展。

    据此,我会推荐以下两种行动方案之一。

    1 - 利用你在模板中加载的静态文件模块和模板标签。

    为此,您应该将链接元素修改为如下所示:

    <link rel="stylesheet" href="{% static "style.css" %}" type="text/css" media="screen" />
    

    请注意,在这种情况下,我已将 {{ STATIC_URL }} 替换为 {% static %} 模板标签。 {% static %} 模板标签接受一个参数,该参数是您希望以静态 URL 作为前缀的文件,并扩展为完整的字符串。

    2 - 通过修改视图以使用上下文进行渲染来利用上下文。

    {{ STATIC_URL }} 变量通过请求上下文提供。有许多有用的变量,如果你想利用它们,你可以依靠它们来扩展它们。问题是您必须确保在渲染模板时使用上下文,这意味着您可能需要更改一个或多个视图。

    例如,一个在没有上下文的情况下呈现的过于简单的视图如下所示:

    from django.shortcuts import render_to_response
    
    def index_without_context(request):
        return render_to_response("index.html")
    

    虽然使用上下文渲染的同样过于简单的视图看起来像这样:

    from django.shortcuts import render_to_response
    from django.templates import RequestContext
    
    def index_with_context(request):
        return render_to_response("index.html",
                                  context_instance=RequestContext(request))
    

    如上所述,通过使用RequestContext 渲染模板,您可以获得其他变量等可用的变量,因此这是一个非常可行的选择。

    最后,这实际上取决于您希望将确保静态文件正确呈现静态 URL 的逻辑保留在哪里。如果您想要模板本身内部的逻辑,我建议您使用{% load staticfiles %} 方法并使用{% static %} 模板标签。如果您更喜欢使用 {{ STATIC_URL }} 变量以及其他可能有用的变量,那么我建议您修改您的视图以使用 RequestContext 呈现。

    您可以在关于这个主题的 Django 文档部分阅读更多关于使用上下文处理器或模板标签的区别:

    https://docs.djangoproject.com/en/1.4/howto/static-files/#referring-to-static-files-in-templates

    【讨论】:

    • 首先,我知道我有两种不同类型的静态内容加载,因为我尝试了所有方法!最后我发现了问题所在。在开发服务器上工作时出错(我在虚拟机上工作)我切换到服务器并且它工作!感谢您提供非常好的和详细的解决方案!
    【解决方案2】:

    "home/henk-jan/website/Template/Database" 是一个有效的位置吗?也许是"/home/henk-jan/website/Template/Database"?现在前面的正斜杠不见了。

    【讨论】:

    • 是的,这就是我的模板和 style.css 所在的位置。 (我刚刚在终端再次检查,它是正确的)
    • @Henkes 在您粘贴的内容中缺少前面的正斜杠。
    • @Henkes 您是否尝试查看源代码以检查呈现的{{ STATIC_URL }} 的值?
    • 也改变了前面的正斜杠..没有成功。
    • @Henkes 渲染的{{ STATIC_URL }} 的值是多少?生成的路径是否有效?包括style.css?
    【解决方案3】:

    如果您在开发服务器上工作,您会希望让 Django 提供静态内容。当您投入生产时,您将让您的 Web 服务器处理提供静态内容的服务。

    您将希望 STATIC_URL 指向您的静态内容的路径(在这种情况下,它看起来应该是 /Template/Database/。听起来您可以正常工作。现在您只需要告诉 Django 提供静态内容处于调试模式时。请参阅此帖子:Django MEDIA_URL and MEDIA_ROOT

    【讨论】:

    • Carric 我也试过了,我的 URL 已经在 URLS 中了。依然没有。我对此感到非常困惑,因为它必须工作...... Maby,因为我正在使用虚拟机?但我不认为是这样,因为我以前从来没有遇到过任何问题..
    • 如果在您查看页面源代码时 STATIC_URL 正确呈现,那么您可能会怀疑 Django 不知道如何为您的静态内容提供服务。通过直接在浏览器中导航到 CSS 文件来确认这一点,以确保它是 404 错误。如果是这种情况,请查看它尝试使用哪些 URL 模式来确保找到您的 CSS 文件的模式存在。它应该存在,因为您应该 (1) 在开发时设置 DEBUG=True,(2) 在 urls.py 中有 urlpatterns += staticfiles_urlpatterns(),并且在 STATICFILES_DIRS 中有 CSS 文件的路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2017-06-10
    • 2017-01-07
    • 2021-07-07
    • 2016-08-20
    • 2011-03-13
    • 2012-08-16
    相关资源
    最近更新 更多