【问题标题】:Django and staticfiles questionsDjango 和 staticfiles 问题
【发布时间】:2011-12-29 03:12:16
【问题描述】:

我学习 Django 越多,我发现的新事物就越多。

我阅读了官方文档、stackoverflow 和 google,但我仍然有疑问。

组织静态文件的正确/正常方式是什么?

我的意思是文件夹和 settings.py

我有类似的东西:

CURRENT_PATH = os.path.dirname(__file__)

STATIC_ROOT = os.path.join(CURRENT_PATH, 'static')

STATIC_URL = '/static/'

好的,我将在 ~/static/ 上收集我所有的应用程序静态数据

我在每个应用程序上都创建了一个静态/应用程序名称文件夹,并将我所有应用程序的静态文件放在那里。

另外,我需要一个静态文件夹来存放项目范围的静态数据(它的通用名称是什么?因为我使用 /static/ 收集的东西,它们不能相等)。

到目前为止一切顺利,我有类似的css:

href="{{ STATIC_URL }}appname/styles.css"

它就像魅力一样。

但我认为,当我部署我的应用程序时,我必须运行“collectstatic”,所以我将那个“/static/”文件夹放在 Cherokee 上。

问题是……这行得通吗?我尝试评论 AppDirectoryFinder 和 _DIRS 之一,但这在本地不起作用(收集静态内容,我的意思是,/static/ 和其他文件夹中的 css)。

在根目录下为所有项目创建一个静态文件夹会更好吗?并将管理员 css 复制到该文件夹​​(AKA 手动收集静态)。

我在 github/bitbucket 上看到的项目已经准备好部署,我需要知道从 dev 到 deploy 的步骤。

谢谢!

【问题讨论】:

    标签: django deployment static


    【解决方案1】:

    我会在使用 django 静态应用程序时分解它

    将提供静态媒体的网址 STATIC_URL = '/静态/' 这用于两件事 模板中的 {{STATIC_URL}} 和静态文件 url 以及在 django 中托管您的静态文件(仅限开发

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()
    

    您的文件在服务器上的驻留位置

    STATIC_ROOT = '/var/www/website/static'
    

    这在您运行 collectstatic 时使用,并且是您的网络服务器应该查看的位置

    您的文件查找器定义

    STATICFILES_FINDERS = ( 
                           'django.contrib.staticfiles.finders.FileSystemFinder',
                           'django.contrib.staticfiles.finders.AppDirectoriesFinder',
                           )
    

    我使用了 django 的默认设置,当然你可以使用更多,但这里是你想知道的关键

    'django.contrib.staticfiles.finders.AppDirectoriesFinder'

    将在已安装的应用程序中找到任何名为“static”的文件夹

    'django.contrib.staticfiles.finders.FileSystemFinder'

    会告诉 django 查看 STATICFILES_DIRS(这是你的项目范围的静态文件)

    应该定义为一个元组

    STATICFILES_DIRS = ( 
                        join( CURRENT_PATH, 'static' ),
                        )
    

    “静态”是您想要的任何内容,您可以添加任意数量的其他文件夹进行监控。

    您在每个应用程序中放置的子目录 ie:app/static/appname 不是必需的,但会确保不同应用程序中的同名文件不会覆盖来自其他应用程序或根静态文件夹的文件

    所有这些都来自我自己的经验和https://docs.djangoproject.com/en/1.3/ref/contrib/staticfiles/

    【讨论】:

      【解决方案2】:

      另外,我需要一个静态文件夹来存放项目范围的静态数据(它的通用名称是什么?因为我使用 /static/ 收集的东西,它们不能相等)。

      你确定吗?我很确定我正在使用同一个文件夹来收集我的静态文件并保存我的项目范围的静态文件。不确定这是否是不推荐的做法,但它对我有用。

      请注意,这只是在部署方面;我的代码库只有项目静态文件。

      【讨论】:

      • 如果我们要手动收集我们的东西,我们应该不会在文件夹中放置任何内容。所以我认为我们需要两个不同的文件夹
      猜你喜欢
      • 2017-04-20
      • 2011-07-31
      • 2012-06-29
      • 2018-05-14
      • 2014-05-11
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2019-09-19
      相关资源
      最近更新 更多