【问题标题】:How to include external css, image, etc in django template?如何在 django 模板中包含外部 css、图像等?
【发布时间】:2011-10-27 05:50:07
【问题描述】:

在 django 中,所有的 url 都是从 urls.py 文件中解析出来的。因此,没有这样的目录结构。

那么,如果你必须在你的模板中包含一个 css 文件呢?

有没有办法不将其添加到 url.py 文件中?

如果不是,那么你会在 urls.py 中为每个资源创建新条目吗?

【问题讨论】:

  • 显然,不……这是一个疑问。我还没有完整阅读文档。
  • 一个简单的文档链接就可以了。但是你必须总是投反对票。:(

标签: python django


【解决方案1】:

请参阅Django HOWTO on static files

基本上,在您的配置文件中,您指定一个特殊的目录来存储静态文件。文档中的示例是:

STATIC_ROOT = "/home/jacob/projects/mysite.com/sitestatic"

您将 CSS 文件、图像等放入其中,服务器就会知道从该目录中提供与您的静态 URL 模式匹配的 URL。

【讨论】:

  • 不:# 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: "/var/www/example.com/static/" STATIC_ROOT 本质上,当您运行python manage.py collectstatic 之类的命令时,静态文件将存放在此处,但您自己不会在此处放置任何内容。
  • @doctordoder 自从我两年半前回答这个问题以来,情况似乎发生了变化。随时为现代 Django 更新此答案。
  • 如果我知道怎么做的话。目前,我自己在做这件事时遇到了麻烦(我正在阅读指南并查看旧的 SO 线程)。不幸的是,我只知道那行不通。向与我同船的其他人道歉。
【解决方案2】:

您不再需要指定 STATIC_ROOT(对于 djangor > 1.10)。简单地说,确保

django.contrib.staticfiles

包含在 INSTALLED_APPS 中

STATIC_URL = '/static/'

在你的 settings.py 中

在您的应用目录中创建一个名为“static”的目录,在创建的静态目录中,另一个名为您的应用的子目录并在其中包含静态文件(您也可以在最后一个目录中创建 js、img、css 子目录基于如果你需要,你的偏好)

然后,在模板文件中包含正确的路径。例如:

src = "/static/my_app/example.js"

src = "/static/my_app/js/example.js"

(假设您的 javascript 文件位于名为 js 的目录中)

或者(更好),使用静态模板标签定义路径:

{% load static %}
<script src="{% static "my_app/js/example.js" %}"></script>

所有你需要知道的:

https://docs.djangoproject.com/en/1.10/howto/static-files/

【讨论】:

  • 啊,终于有一些真正有效的东西了!谢谢!
  • 我有一个不属于特定应用的共享模板。所以我在项目根文件夹中有一个模板。我按照你的建议做了:在根目录下我有一个静态文件夹,我有一个文件夹,里面有我的应用程序的名称,然后我有 css/styles.css。在我做的模板里面: {% load static %} 并调用它: href="{% static "flights/css/styles.css" %}" 一旦模板被共享,我也尝试了把 static/css/styles .css 并要求: href="{% static "css/styles.css" %}" 但仍然无法正常工作...
【解决方案3】:

在我的根 urls.py 文件中,我在本地开发时使用此模式来提供静态文件。我还添加了一个名为 SERVE_STATIC_MEDIA 的设置,以便将其与 DEBUG 分开。

if settings.SERVE_STATIC_MEDIA:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', \
            {'document_root' : settings.MEDIA_ROOT}),
    )

然后在一个模板中,就可以访问css、js、图片等:

<link type="text/css" href="{{ MEDIA_URL }}css/foo.css" media="screen,projection" />

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 2013-06-15
    • 2014-02-04
    • 2019-04-21
    • 2013-02-17
    • 2020-12-12
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多