pinax如何学习访问帐户基本项目中的css文件?

时间:2012-02-06 23:57:06

标签: django pinax

我刚开始使用Pinax 0.9a2。基本配置,并部署了“帐户”项目。我观察到在安装的应用程序中我有“pinax_theme_bootstrap”。主页面正确显示,基本应用程序主题的css。如果我浏览页面源,在各种各样的东西中,我有这个用于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的地方。

2 个答案:

答案 0 :(得分: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选项的组合,其他包括finders。这些将在每个应用程序下找到静态媒体。它还允许应用程序不必知道整个绝对URL。相反,他们可以在模板中使用{{STATIC}}来获取根位置。

现在,当您使用“runserver”运行您的开发服务器时,它将为您解析所有静态媒体。这就是找到bootstrap css的原因。 Ita在theme_base.html中被引用为静态URL。

当您准备好进行生产时,您显然将不再使用django dev服务器。然后,您将最终运行像'./manage.py collectstatic'这样的命令,它将所有静态媒体聚合到一个位置,然后您可以通过您选择的Web服务器进行服务。我希望这能为你解决这个问题。由于pinax是django,因此最好回顾一下关于这个的django文档。

答案 1 :(得分:1)

  1. Pinax使用django-staticfiles提供静态文件。您可以在STATIC_ROOT中找到STATICFILES_DIRSSTATICFILES_FINDERSsettings.py个变量。

  2. 在Pinax帐户基础项目的url.py中,您可以找到如下所示的行:url(r"", include("staticfiles.urls")),它定义了静态文件访问权。

  3. 获得更好的视图,django-statifiles在调试模式下覆盖Django默认runserver命令,它用WSGIHandler重写Django defualt StatifFilesHandler。因此,当您运行python manage.py runserver并访问该站点时,它将确定该请求是否为静态文件请求,如果为true,则会找到存储在STATICFILES_DIRS设置中的文件(使用staticfiles.finders.FileSystemFinder)以及static中每个应用的staticfiles.finders.AppDirectoriesFinder子目录(使用INSTALLED_APPS)。

  4. 这里,pinax_theme_bootstrap是一个Django应用程序,只包含static目录下的静态文件,默认由pinax帐户基础项目安装。 staticfiles应用已解析静态文件访问权限,因此您无法在urls.py下找到任何pinax_theme_bootstrap文件。

  5. 如果要将项目部署到产品环境中。您应该使用python manage.py collectstatic命令收集STATIC_ROOT目录下的所有有用静态文件。然后您可以通过Nginx或其他http服务器提供此目录。


  6. 当您访问http://localhost:8000/site_media/static/css/bootstrap.min.css时,Django将匹配urls.py中的此网址,每个特定配置在最后一个staticfiles配置之前将不匹配。因此,此访问权限将由staticfiles解决。根据您的STATICFILES_FINDER配置,staticfiles首先找到项目下的static目录,如果结果为none,则会在static中找到名为INSTALLED_APPS的每个子目录。