2012-02-06 35 views
1

我剛開始使用Pinax 0.9a2。基本配置,並部署了「賬戶」項目。我觀察到,在已安裝的應用程序中,我有「pinax_theme_bootstrap」。主頁面正確地顯示出來,用基本應用程序主題的CSS。如果我瀏覽網頁的源文件,各種東西中,我有這樣的CSSpinax如何學習訪問賬戶基本項目中的css文件?

http://localhost:8000/site_media/static/css/bootstrap.min.css

的一點是,我找不到任何地方這條線從何而來,也不是如何實際投放。我的理解可能是由pinax_theme_bootstrap應用程序生成的,但我不明白:這個應用程序應該如何操作,如果有一個在它沒有urls.py解決上述線,並提供文件?

該文件存在,並且在這裏

MacQuela:~/Work/Projects/test/test/lib/python2.7/site-packages/pinax_theme_bootstrap/static/css $ ls 
bootstrap.min.css extra.css 

完整路徑這是settings.py當談到靜態聲明

STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static") 

# URL that handles the static files like app media. 
# Example: "http://media.lawrence.com" 
STATIC_URL = "/site_media/static/" 

# Additional directories which hold static files 
STATICFILES_DIRS = [ 
    os.path.join(PROJECT_ROOT, "static"), 
] 

STATICFILES_FINDERS = [ 
    "staticfiles.finders.FileSystemFinder", 
    "staticfiles.finders.AppDirectoriesFinder", 
    "staticfiles.finders.LegacyAppDirectoriesFinder", 
    "compressor.finders.CompressorFinder", 
] 

無處指定其中pinax可以發現,CSS。

+0

爲什麼它需要該應用程序的urls.py?它的settings.py中引用了主STATIC_URL/STATIC_ROOT選項。它期望在您的靜態位置找到該文件。 – jdi 2012-02-07 00:03:03

+0

@jdi:就是這一點。它是如何找到它們的?這些文件不在STATIC_ROOT中。它們隱藏在pinax_theme_bootstrap中,它位於lib/python2.6/site-packages/pinax_theme_bootstrap/ – 2012-02-07 00:06:50

+0

另外,我不明白。如果你沒有urls.py,你應該如何使用應用程序?我不明白這個機制。本教程僅介紹具有用於訪問視圖的urls.py的應用程序。它永遠不會呈現沒有該架構的應用程序。 – 2012-02-07 00:08:38

回答

2

我的意見最終得到長你的問題下,所以我決定嘗試採取搖擺的答案。

bootstrap.css附帶pinax_theme_bootstrap的應用程序,你可以在theme_base.html模板見:https://github.com/pinax/pinax-theme-bootstrap/blob/master/pinax_theme_bootstrap/templates/theme_base.html

其引用Django的靜態位置是從您的settings.py選項解決。現在事實上,你實際上在稍微修改過的位置上看到了這個文件的縮小版本,這讓我相信你有另一個django靜態*應用程序可以爲你縮小css/js。最有可能的是它的微型應用程序compressor

更新

所迷惑你實際上是Django是如何提供靜態文件的部分:https://docs.djangoproject.com/en/dev/howto/static-files/

這裏沒有魔法。它非常簡單。項目中的每個應用程序都可以包含自己的靜態/目錄,該目錄將包含該應用程序的靜態媒體。你會注意到在你的settings.py中,並且在上面的鏈接中,有一個STATIC選項的組合,另一個包括像發現者。這些將在每個應用程序下找到靜態媒體。而且它還允許應用程序不必知道整個絕對網址。相反,他們可以使用模板中的{{STATIC}}來獲取根位置。

現在,當你使用「的runserver」運行開發服務器,將解決所有的靜態媒體爲您服務。這就是爲什麼引導CSS正在被發現。 Ita在theme_base.html中作爲靜態url被引用。

當你準備好你的生產顯然將不再使用的Django開發服務器。然後,您將最終運行一個類似'./manage.py collectstatic'的命令,將所有靜態媒體集中到一個位置,然後您可以通過您選擇的Web服務器進行服務。我希望這會爲你清除它。由於pinax是django,所以最好查看關於這個的django文檔。

+0

更新後的問題 – 2012-02-07 08:48:53

1
  1. Pinax使用django-staticfiles服務於靜態文件。您可以在settings.py中找到STATIC_ROOTSTATICFILES_DIRSSTATICFILES_FINDERS變量。

  2. 在Pinax賬戶庫項目的url.py中,您可以找到如下所示的行:url(r"", include("staticfiles.urls")),它定義了靜態文件訪問。

  3. 獲得更好的視野,django-statifiles調試模式下覆蓋的Django默認runserver命令,它改寫了Django的defualt WSGIHandlerStatifFilesHandler。所以,當你運行python manage.py runserver和訪問該網站時,它將確定該請求是否是一個靜態文件請求,如果是真的,它的發現(用staticfiles.finders.FileSystemFinder)存儲在STATICFILES_DIRS設置文件和(使用staticfiles.finders.AppDirectoriesFinder)中的每個應用的static子目錄INSTALLED_APPS

  4. 在這裏,pinax_theme_bootstrap是一個Django應用程序,僅包含static目錄下的靜態文件,並且默認由pinax帳戶基礎項目安裝。靜態文件訪問由staticfiles應用程序解決,因此您無法在pinax_theme_bootstrap下找到任何urls.py文件。

  5. 當您要將項目部署到產品環境時。您應該使用python manage.py collectstatic命令收集STATIC_ROOT目錄下的所有有用的靜態文件。然後你可以通過Nginx或其他http服務器來提供這個目錄。


當您訪問http://localhost:8000/site_media/static/css/bootstrap.min.css,那麼Django會匹配這個網址在urls.py,每一個具體的配置將不匹配直到最後staticfiles配置。所以這個訪問將通過staticfiles解決。根據您的STATICFILES_FINDER配置,staticfiles首先在您的項目下找到static目錄,如果結果爲none,那麼它會在INSTALLED_APPS中找到名爲static的每個子目錄。

+0

我仍然不明白,pinax_theme_boostrap在哪裏與靜態文件進行通信?這裏有太多的黑魔法了。 – 2012-02-07 08:43:38

+0

已更新問題 – 2012-02-07 08:48:12

+0

@StefanoBorini設置了「staticfiles.finders.AppDirectoriesFinder」後,靜態文件位於每個Django應用程序下名爲'static'的目錄中。 – risent 2012-02-07 08:57:26