簡體   English   中英

django collectstatic 在 django 項目中的每個應用程序中查找資產目錄

[英]Django collectstatic to look for assets directory in every app in django project

目前,我的 Django 項目中有 6-7 個應用程序。 在 STATICFILES_DIRS 的 settings.py 中,我需要指定所有應用程序中存在的資產目錄完整路徑,這在我每次需要在此處添加路徑時增加應用程序時會很麻煩。 難道沒有一種設置可以讓我只指定資產文件夾,並且 collectstatic 命令將在我所有應用程序的資產中查找靜態文件嗎?

這是我目前擁有的:

STATICFILES_DIRS = [
    BASE_DIR / "app1/templates/assets",
    BASE_DIR / "app2/templates/assets",
    BASE_DIR / "app3/templates/assets",
    BASE_DIR / "app4/templates/assets",
    BASE_DIR / "app5/templates/assets",
    BASE_DIR / "app6/templates/assets",
]

我需要的是這樣的東西,而 collectstatic 會去我所有的應用程序(1-6)尋找資產目錄。

STATICFILES_DIRS = [
    'templates/assets',
]

有沒有辦法做同樣的事情?

來自 Django 4.0 文檔: https ://docs.djangoproject.com/en/4.0/ref/contrib/staticfiles/

Django 約定規定我們可以在靜態目錄中的每個應用程序下擁有所有靜態文件。 最好在靜態目錄中創建另一個與項目同名的文件夾(項目名稱/應用程序名稱/靜態/應用程序名稱/[所有靜態文件和文件夾])

默認是查看 STATICFILES_DIRS 中定義的所有位置以及 INSTALLED_APPS 設置指定的應用程序的“靜態”目錄。

注意: % static總是在 settings.py、STATICFILES_DIRS 中指定的 STATIC_ROOT 和每個應用程序內的靜態目錄下查找。 索引.html

<link rel="stylesheet" href="{% static 'app/css/bootstrap.min.css' %}" />
<link rel="stylesheet" href="{% static 'app/css/LineIcons.2.0.css' %}" />
<link rel="stylesheet" href="{% static 'app/css/animate.css' %}" />
<link rel="stylesheet" href="{% static 'app/css/tiny-slider.css' %}" />
<link rel="stylesheet" href="{% static 'app/css/glightbox.min.css' %}" />
<link rel="stylesheet" href="{% static 'app/css/main.css' %}" />

設置.py

STATICFILES_DIRS = [
        # specify other static directory where static files are stored n your environment.
        # by default static folders under each app are always looked into and copied.
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static') # this is the folder where all static files are going to be stored after we run collectstatic command
STATIC_URL = '/static/' # this is the url from which static elements can be accessed

在生產中:

常見的策略是從像 Amazon 的 S3 和/或 CDN(內容交付網絡)這樣的雲存儲提供商提供靜態文件。 這使您可以忽略提供靜態文件的問題,並且通常可以加快網頁的加載速度(尤其是在使用 CDN 時)。

將靜態文件投入生產的基本大綱包括兩個步驟:當靜態文件發生變化時運行 collectstatic 命令,然后安排將收集的靜態文件目錄(STATIC_ROOT)移動到靜態文件服務器並提供服務。

但是在這里,我們使用 apache Web 服務器從同一台機器上提供靜態文件。

每次更改靜態文件時都需要執行命令

python manage.py collectstatic

並在 urls.py 中指定靜態 url

網址.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("app.urls")),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

由於所有靜態文件都將由 Web 服務器本身提供,因此我們需要在配置文件中指定位置。 請注意,當靜態文件由 apache Web 服務器提供時,在生產中運行 collectstatic 命令很重要。 它在配置文件中指定的位置查找靜態文件,該位置通常是 STATIC_ROOT 目錄。

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #Serving static files
        Alias /static/ /etc/myproject/static/
        <Directory /etc/myproject/static>
                Require all granted
        </Directory>

        <Directory /etc/myproject/myproject>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>
        WSGIDaemonProcess myproject python-path=/etc/myproject python-home=/etc/myprojectenv
        WSGIProcessGroup myproject
        WSGIScriptAlias / /etc/myproject/myproject/wsgi.py

</VirtualHost>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM