Django项目提供带有几个应用程序的静态文件

2024-04-25 22:55:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django项目中有以下结构。正如你所看到的,有一个名为“博客”的应用程序以及与项目本身同名的主应用程序。在

enter image description here

我遇到的问题是从主项目的static目录提供静态文件。blog应用程序有自己的static目录,这些文件将得到正确的服务(当相关的URL路由被遍历时)。在

有人能告诉我我做错了什么吗?另外,在处理多个应用程序时,提供静态文件的最佳实践是什么?将所有样式和脚本转储到项目根目录中的一个公共static目录是明智之举,还是将所有的东西从一个应用程序完全分开?在

设置.py

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATIC_ROOT = os.path.join(BASE_DIR, "..", "django_by_example_blog", "static")
STATIC_URL = '/static/'

网址.py

^{pr2}$

基本.html

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>Home | Triangle</title>
    <link href="{% static "css/bootstrap.min.css" %}" rel="stylesheet">
    <link href="{% static "css/font-awesome.min.css" %}" rel="stylesheet">
    <link href="{% static "css/animate.min.css" %}" rel="stylesheet"> 
    <link href="{% static "css/lightbox.css" %}" rel="stylesheet"> 
    <link href="{% static "css/main.css" %}" rel="stylesheet">
    <link href="{% static "css/responsive.css" %}" rel="stylesheet">

    <!--[if lt IE 9]>
        <script src="{% static "js/html5shiv.js" %}></script>
        <script src="{% static "js/respond.min.js" %}"></script>
    <![endif]-->       
    <link rel="shortcut icon" href="{% static "images/ico/favicon.ico" %}">
    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="{% static "images/ico/apple-touch-icon-144-precomposed.png" %}">
    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="{% static "images/ico/apple-touch-icon-114-precomposed.png" %}">
    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="{% static "images/ico/apple-touch-icon-72-precomposed.png" %}">
    <link rel="apple-touch-icon-precomposed" href="{% static "images/ico/apple-touch-icon-57-precomposed.png" %}">
</head><!--/head-->

<body>

Tags: 项目应用程序appleoslinkstaticcssrel
2条回答

STATIC_ROOT指定运行collectstatic命令时将所有静态文件转储到其中的文件夹

python manage.py collectstatic

您似乎已将应用程序的静态文件夹之一指定为静态根目录。在

最好提供另一个文件夹来保存所有静态文件。在

^{pr2}$

当您运行collectstatic命令时,它将收集所有静态文件并将它们放入STATIC_ROOT文件夹中。在

不过,在运行DEBUG=True时,您不必担心这些。 Django将为所有静态内容提供服务(包括来自各个应用程序的内容),但在生产环境中,不建议这样做,web服务器的工作是提供静态内容。在

编辑:

你还需要在你的基础上指定网址.py在

from django.conf.urls.static import static
from django.conf import settings

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

“将所有样式和脚本转储到公共静态目录”正是collectstatic命令所做的。您应该运行它,并配置您的服务器以从那里提供文件。在

首先,您应该将静态根设置设置为指向该公共目录,而不是应用程序内部。在

相关问题 更多 >