Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 2.1:所有应用程序的基本模板都无法识别项目根目录中的静态文件_Django - Fatal编程技术网

Django 2.1:所有应用程序的基本模板都无法识别项目根目录中的静态文件

Django 2.1:所有应用程序的基本模板都无法识别项目根目录中的静态文件,django,Django,遵循此结构: gallito (Django project folder) |_gallito |_main_app |_static |_main_app |_style.css |_static |_style2.css |_templates (new) |_registrati

遵循此结构:

gallito (Django project folder)
   |_gallito
   |_main_app
             |_static
                     |_main_app
                               |_style.css

   |_static
            |_style2.css
   |_templates (new)
                |_registration
                              |_login.html
                |_base.html
我需要/希望在project root template文件夹中有一个基本模板,它可以扩展到我的主应用程序(以及将来会有的其他应用程序)中的html文件

“base.html”扩展了correclty,但在读取项目根目录中静态文件夹中的css文件时遇到问题:“style2.css”

在项目根目录静态模板文件夹内的my base.html文件中,我:

使用此功能并从主应用程序调用样式表,我可以让我的网站正常工作:

<link href="{% static 'main_app/style.css' %}" rel="stylesheet">
我已经读到,我还需要一个STATICFILES\u DIRS变量来指向我的静态文件DIRS。有关于这个的指示吗

静态文件

base.html自根目录:

gallito (Django project folder)
   |_gallito
   |_main_app
             |_static
                     |_main_app
                               |_style.css

   |_static
            |_style2.css
   |_templates (new)
                |_registration
                              |_login.html
                |_base.html
{%load staticfiles%}
用于引导的Jumbotron模板

根据评论中的对话,我将补充说,根据您当前的项目结构,您可以将此
更改为此
,因为您在根级别引用静态文件,而Django默认情况下在每个应用程序中查找静态文件。但是,我希望你会考虑以下几点:

如果要使用多个静态文件位置,可以方便地使用
collectstatic
方法。你需要做几件事

首先,您需要创建一个静态文件所在位置的列表,就像这样-了解Django在运行后面描述的
collectstatic
命令时,默认情况下会搜索每个项目中的
static/
文件夹,因此,这些位置适用于每个应用程序根目录下未命名的任何目录。
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
。 现在,您只需在模板中引用
静态根目录的路径即可;请记住,根据所述模板在项目结构中的位置,您可能需要进入一两个目录

无论如何,这是一种方法。但是请记住,让Django提供静态文件并不是一个很好的实践,正如文档所描述的那样

这也可能值得一读


还要认识到,每次更改静态文件或添加新文件时,都需要运行
collectstatic
命令,因为静态根目录仍然包含旧文件

@Hildy这并不能解决问题。是的,我错了,答案就要来了……泰。你能不能使用我的应用程序的名称,而不仅仅是
one/static\u location
some\u other/static\u location
?2) 每次更改某些文件或添加新文件时,是否应在运行服务器之前运行
python manage.py collectstatic
?3) 我不明白如何引用到
静态根目录的路径。你可以用my template base.html来解释这个问题吗?好吧,你可以让事情变得简单,只需命名每个应用程序中包含静态文件的目录
static
,而你可能根本不需要
STATICFILES\u DIRS
,因为Django已经知道如何查看。因此,如果您的应用程序名为“AppOne”,其目录类似于
myProject>AppOne>static
,则表示Django,而
collectstatic
命令将直接找到它们。然后,您要做的是创建每个静态目录,如
AppOne>static>AppOne>css>custom_styles.css
。然后将它与{{%static'AppOne/css/custom_styles.css%%}一起使用,但如果我正确理解了您的图表,您的部分问题可能是在根级别有一个名为
static
的目录,Django没有在那里查找静态目录,而是在应用程序中查找。你可以试着证明这是对的还是错的:把这个
改成这个
,这正是我认为的问题所在。你最后提出的解决方案并不能解决这个问题。太酷了。如果是我,我会使用根级别的静态目录作为我的静态根目录,并将
style2.css
放在其中一个应用程序的静态目录中,
collectstatic
,然后在每个模板中引用它。
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'one/static_location'),
                    os.path.join(BASE_DIR, 'some_other/static_location')]
STATIC_ROOT = os.path.join(BASE_DIR, "the_location_you_chose/")