【问题标题】:Django - referencing static files in templatesDjango - 在模板中引用静态文件
【发布时间】:2012-12-10 09:48:51
【问题描述】:

我在模板中引用静态文件时遇到了困难。我正在使用 Twitter Bootstrap 并将引导文件(css、img、js)放在 mysite/static 中。

我已经根据this tutorial设置了STATIC_URLSTATIC_ROOTTEMPLATE_CONTEXT_PROCESSORS。我已经运行了./manage.py collectstatic,它复制了 72 个文件。我还在我的模板 (index.html) 文件中添加了以下模板标签,但这没有用。

{% load staticfiles %}
<link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen"/>

任何有关如何引用文件以便引导样式返回到模板的帮助将不胜感激!

【问题讨论】:

    标签: python django templates twitter-bootstrap static


    【解决方案1】:

    您是否在视图中设置user_stylesheet 上下文变量?您需要先设置它,然后才能将其传递给模板。

    我通常只使用{{ static_url }} 标记来做这些事情,所以我包含引导组件的代码会是这样的。

    <link href="{{ STATIC_URL }}bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <script src="{{ STATIC_URL }}bootstrap/js/jquery.js"></script>
    

    假设 bootstrap 文件夹存在于 static 中。

    编辑

    对于您的情况,要设置 user_stylesheet 上下文变量,您需要执行类似的操作

    dict["user_stylesheet"]= <path to your file>
    #add other context variables you might have to
    render_to_response(<your template name>, dict, context_instance=RequestContext(request))
    

    【讨论】:

    • 谢谢@ersran9。我没有在views.py 中设置user_stylesheet 上下文变量。目前这是全新的领域,所以我不太确定将其设置为什么。您的 user_stylesheet 上下文变量会读取什么内容?
    • @Jess 编辑了答案。顺便说一句,如果您使用的是我展示的 static_url,则无需设置 user_stylesheet,在 settings.py 中设置正确的 static_root 和 static_url 就足够了
    • 好的,谢谢。我在 settings.py 中设置了 static_root 和 static_url 并将下面 super9 推荐的代码添加到 index.html 的顶部,但这没有用。还有什么我可能做错的吗?
    • @Jess 尝试在您的模板中打印{{ STATIC_URL }} - 检查它是否设置为正确的网址。确认后,尝试直接通过浏览器请求文件,即:127.0.0.1:8000//bootstrap/css/bootstrap.css 检查{{ STATIC_ROOT }}是否设置正确
    【解决方案2】:

    应该是

    {% load static %}
    

    然后像

    <!-- path -->
    <link href="{% static 'bootstrap/css/bootstrap.css' %}" rel="stylesheet" type="text/css">
    <!--->
    

    完整性更新

    文件夹结构

    • 项目
    • app1
    • app2
    • myproj_public
    • 静态
      • CSS
        • bootstrap.css
      • js
        • xyz.js

    设置文件

    STATIC_ROOT = os.path.join(os.path.abspath(
        os.path.join(PROJECT_ROOT, 'myproj_public', 'static')), '')
    
    STATIC_URL = '/static/'
    

    【讨论】:

    • 谢谢。我已将此添加到我的 index.html 文件的顶部,但这没有奏效。还有什么我可能错过的吗?
    • 当您在 firebug (firefox) 或开发人员工具 (chrome) 中检查您的页面时会显示什么信息。您的 css 文件是否在正确的目录中?
    • 感谢您的回答,我在修复静态文件的路径后终于可以正常工作了。
    • 此解决方案是否仍然有效?我正在使用 Django 1.8.6,这对我不起作用。我的目录结构很相似。
    • 不,它似乎已经过时了。 docs.djangoproject.com/en/1.11/howto/static-files
    【解决方案3】:

    当你设置static_root时,例如:

    STATIC_ROOT = os.path.join(BASE_DIR, "static_root/")
    

    ,所有文件都复制到那里,而不是project_root/static。这是 Django 1.3 中引入的一种新机制,用于简化静态文件处理:它将收集每个 STATICFILES_DIR 和每个已安装应用程序下的所有 static dir 中的所有文件,因此您将它们复制一次总而言之。

    引用 static_root 路径的 css/js 文件。

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2011-12-18
      • 2012-06-03
      • 1970-01-01
      相关资源
      最近更新 更多