遵循以下结构:
gallito (Django project folder)
|_gallito
|_main_app
|_static
|_main_app
|_style.css
|_static
|_style2.css
|_templates (new)
|_registration
|_login.html
|_base.html
我需要/想要在项目根模板文件夹中有一个基本模板,该模板可以扩展到我的main_app(以及将来会有其他应用)中的html文件。
'base.html'扩展了相关性,但是在项目根目录“ style2.css”的静态文件夹中读取css文件时遇到了问题
在项目根目录静态模板文件夹中的base.html文件中,我已经:
使用它并从main_app调用样式表,我的网站可以正常工作:
<link href="{% static 'main_app/style.css' %}" rel="stylesheet">
但是,如果我想从项目根静态文件夹中调用样式表,它将无法正常工作:
<link href="{% static 'style2.css' %}" rel="stylesheet">
为什么?
我在项目设置中具有此功能
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
STATIC_URL = '/static/'
我读到我还需要一个STATICFILES_DIRS变量来指向我的静态文件目录。有任何指针吗?
STATICFILES_DIRS
根base.html:
{% load staticfiles %}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../../../favicon.ico">
<title>Jumbotron Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
<link href="../../dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="jumbotron.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="signin.css" rel="stylesheet">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" rel="stylesheet">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.bundle.min.js" rel="stylesheet">
<link href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" rel="stylesheet"/>
<link href="{% static 'main_app/style.css' %}" rel="stylesheet">
<!--<link href="{% static 'style2.css' %}" rel="stylesheet">-->
</head>
答案 0 :(得分:2)
根据评论中的对话,我将添加您当前的项目结构,您可以将此<link href="{% static 'style2.css' %}" rel="stylesheet">
更改为此<link href="{% static '../static/style2.css' %}" rel="stylesheet">
,因为您是在根级别引用静态文件,而Django是默认情况下,在每个应用程序中查找静态文件。但是,希望您考虑以下内容:
如果要使用多个静态文件位置,则使用collectstatic
方法可能会很方便。您需要做几件事。
首先,您需要创建一个静态文件所在的位置列表,如下所示-了解默认情况下,当您运行上述static/
命令时,Django将在每个项目中搜索collectstatic
文件夹以后,这些位置适用于每个应用程序根目录下未命名为static/
的所有目录:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'one/static_location'),
os.path.join(BASE_DIR, 'some_other/static_location')]
您最终将运行一个命令,该命令会将您的静态文件收集到一个位置。这称为静态文件根。确定放置位置后,您可以在settings.py中创建一个变量,该变量的注册方式如下:
STATIC_ROOT = os.path.join(BASE_DIR, "the_location_you_chose/")
然后,运行命令python manage.py collectstatic
。
现在,您只需在模板中引用STATIC_ROOT
的路径即可;请记住,您可能需要上一个或两个目录,具体取决于所述模板在项目结构中的位置。
那是做到这一点的一种方法。但是请记住,如文档所述,让Django提供静态文件并不是一个好习惯。
这个SO answer也许也值得一读。
还要意识到,每次更改静态文件或添加新文件时,都需要运行collectstatic
命令,因为静态根目录仍将包含旧文件。