标签: django-staticfiles

Django Debug=False 白噪声不起作用

我正在尝试将功能齐全(当本地且 Debug=True 时)站点部署到 Heroku。当我使用默认的 Django staticfile_storage 设置时,我的网站显示为活动状态,但没有任何静态文件(css、图像等)。管理面板可以工作,但也没有任何样式。

但是,当我尝试使用 Whitenoise(这正是我最初的意图)时,我收到服务器 500 错误。届时管理面板将无法工作。我一生都无法弄清楚我做错了什么。

我尝试按照 Heroku 的模板来建模我的 settings.py 文件: https://github.com/heroku/heroku-django-template和 Whitenoise 的文档http://whitenoise.evans.io/en/latest/django.html

当我查看最近的 Heroku 日志时,我看到

at=info method=GET path="/static/css/styles.css" host=www.mysite.net request_id=826280da-21ba-48a1-8a05-679c92871d38 dyno=web.1 connect=0ms service=3ms status=404 bytes=361
Run Code Online (Sandbox Code Playgroud)

当我推送到 Heroku 时,部署成功,但是当我运行时

heroku run python3 manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)

它说我必须覆盖预先存在的文件(是/否),当我说是时,我收到一条错误消息,指出找不到 app/static 目录。

我非常困惑——我可能做错了什么?如果我的静态文件目录不正确,我该如何找到它?

项目结构

mysite/
    blog/
        static/
            css/
                styles.css
            images/
                favicon.png
        templates/
            blog/
                blog_list.html
                blog_detail.html
            index.html
            bio.html
            resume.html
        models.py
        views.py
        urls.py
    media/
        portfoliopieces/
             1.png
             2.png
             3.png
             4.png
    mysite/
        settings.py
        urls.py
        wsgi.py
    portfolio/
        templates/
            portfolio_list.html
            portfolio_detail.html
        models.py …
Run Code Online (Sandbox Code Playgroud)

django heroku django-settings django-staticfiles

7
推荐指数
1
解决办法
5469
查看次数

如何在Django 1.4中使用django.contrib.staticfiles提供管理静态文件(使用一个Apache服务器)?

Django建议我,如果我只使用一台服务器(Apache)来提供动态和静态文件,那么我应该使用静态文件django.contrib.staticfiles.

所以在我,settings.py我已经加载django.contrib.staticfiles到我INSTALLED_APPSdjango.core.context_processors.static我的TEMPLATE_CONTEXT_PROCESSORS.

我注意到在管理模板中它链接到这样的静态文件(来自index.html):

{% load i18n admin_static %}

{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %}
Run Code Online (Sandbox Code Playgroud)

但是看一下模板标签admin_static,它只是一个包装器static:

from django.conf import settings
from django.template import Library

register = Library()

if 'django.contrib.staticfiles' in settings.INSTALLED_APPS:
    from django.contrib.staticfiles.templatetags.staticfiles import static
else:
    from django.templatetags.static import static

static = register.simple_tag(static)
Run Code Online (Sandbox Code Playgroud)

所以我得出结论,因为每个管理静态文件都是带有admin/...前缀的服务器,那么完整路径(对于我的情况)应该是

/usr/lib64/python2.7/site-packages/django/contrib/admin/static
Run Code Online (Sandbox Code Playgroud)

所以我将该路径设置为我的STATICFILES_DIRS内部settings.py,但Apache仍然不会提供任何静态文件(在重新启动服务器之后).我的逻辑在哪里犯了错误?

python apache django django-templates django-staticfiles

6
推荐指数
1
解决办法
6710
查看次数

django collectstatic overriding

我正在使用Django 1.3.1和contrib.collectstatic应用程序来管理我的静态文件.

我的项目结构是

myproject
    - settings.py
    - static-media
    - urls.py
    - media
    - manage.py
Run Code Online (Sandbox Code Playgroud)

其中static-media是包含此项目的静态文件的文件夹.在我的settings.py中,我有:

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, "static")+'/'
STATIC_URL = "/static/"
STATICFILES_DIRS = (
        os.path.join(PROJECT_PATH, 'static-media'),
)
Run Code Online (Sandbox Code Playgroud)

我正在使用admin_tools来更改管理员的布局.但是我想从admin_tools覆盖特定的css文件(theming.css).所以在我的静态媒体文件夹中我放了admin_tools/css/theming.css.当我第一次运行时python manage.py collectstatic,它通过忽略admin_tools中的默认的theming.css并使用我在static-media中定义的那个来按预期工作.不幸的是,如果我再次运行该命令,它会覆盖我的css并添加默认值.

这是输出python manage.py findstatic admin_tools/css/theming.css:

Found 'admin_tools/css/theming.css' here:
  /home/paulo/Desktop/Projects/zennetwork/prd/zennetwork/static-media/admin_tools/css/theming.css
  /home/paulo/Desktop/Projects/zennetwork/prd/lib/python2.7/site-packages/admin_tools/theming/static/admin_tools/css/theming.css
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.谢谢.

python django django-staticfiles

6
推荐指数
1
解决办法
6409
查看次数

UncompressableFileError:'scripts/app.js'无法通过COMPRESS_URL('http://my-bucket.s3-us-west-2.amazonaws.com/')访问,无法压缩

我正在尝试将django-compressor和django-storages-redux与django staticfiles和Amazon S3一起使用.这些是我的设置:

STATIC_URL = COMPRESS_URL = 'http://my-bucket.s3-us-west-2.amazonaws.com/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

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

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'site-static'),
)

COMPRESS_PRECOMPILERS = (
    ('text/scss', 'sass --scss --compass {infile} {outfile}'),
)

COMPRESS_CSS_FILTERS = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.CSSMinFilter',
]

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = COMPRESS_STORAGE = 'myapp.apps.mymodel.storage.CachedS3BotoStorage'
COMPRESS_OUTPUT_DIR = 'cache'
COMPRESS_ENABLED = False

AWS_S3_HOST = "s3-us-west-2.amazonaws.com"
AWS_ACCESS_KEY_ID = '---'
AWS_SECRET_ACCESS_KEY = '---'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
AWS_QUERYSTRING_AUTH = False
AWS_S3_CUSTOM_DOMAIN = 'my-bucket.s3-us-west-2.amazonaws.com'
Run Code Online (Sandbox Code Playgroud)

对于静态文件,我使用自定义存储后端,如此处所建议http://django-compressor.readthedocs.org/en/latest/remote-storages/

from django.core.files.storage import get_storage_class
from …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 django-storage django-staticfiles django-compressor

6
推荐指数
1
解决办法
1778
查看次数

Django | 连接路径位于基本路径组件之外{%static img.thumbnail.url%},错误400与whitenoise

我已经完成了我在Django的第一个应用程序并且工作得很好,但是因为我设置了DEGUG = False,所以仍然有预部署问题...这里只是在模板中显示图像... T_T

我正在使用它,但现在当我使用whitenoise为我的图像提供服务时它无法工作......并且它返回错误请求(400)错误...

Models.py

class GalleryItem(models.Model):
    thumbnail = models.ImageField(blank=True,upload_to='gallery/thumb')
    img_wide = models.ImageField(blank=True,upload_to='gallery')
Run Code Online (Sandbox Code Playgroud)

template.py

{% load staticfiles %}
{% for img in img_to_display %}
    <a href="{{ img.img_wide.url}}" class="swipebox" title="">
        <img src="{% static img.thumbnail.url %}" alt="{{ img.alt}}">
    </a>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
import os

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^gallery/', include('gallery.urls')),
    url(r'^shop/', include('shop.urls')),
    url(r'^events/', include('events.urls')),
    url(r'^page/', include('paginator.urls')),
    url(r'^news/', include('blog.urls')),
    url(r'^ckeditor/', include('ckeditor_uploader.urls')), …
Run Code Online (Sandbox Code Playgroud)

python django bad-request django-staticfiles

6
推荐指数
2
解决办法
1万
查看次数

如何使用 ManifestStaticFilesStorage 从哈希中排除路径

我参与了一个使用白噪声来提供静态文件的应用程序。它被配置为使用CompressedManifestStaticFilesStoragewhich 依次使用ManifestStaticFilesStorage.

我所说的静态文件是指我们提供的静态文件,以及第三方的传单等库。

该类ManifestStaticFilesStorage由 Django 提供,将重命名文件名以包含哈希值。用于缓存清除。它过滤资源并更改对文件的未散列引用以包含散列。

这又破坏了传单中的一个功能:

_detectIconPath: function () {
    var el = DomUtil.create('div',  'leaflet-default-icon-path', document.body);
    var path = DomUtil.getStyle(el, 'background-image') ||
               DomUtil.getStyle(el, 'backgroundImage'); // IE8

    document.body.removeChild(el);

    return path.indexOf('url') === 0 ?
        path.replace(/^url\([\"\']?/, '').replace(/marker-icon\.png[\"\']?\)$/, '') : '';
}
Run Code Online (Sandbox Code Playgroud)

问题是 的值path看起来像:

url("https://example.org/static/path/leaflet/dist/images/marker-icon.2273e3d8ad92.png")
Run Code Online (Sandbox Code Playgroud)

由于文件名不匹配,第二次替换不会执行任何操作。这又将返回:

https://example.org/static/path/leaflet/dist/images/marker-icon.2273e3d8ad92.png")
Run Code Online (Sandbox Code Playgroud)

当传单尝试将文件名附加到这个“目录”时,我们得到:

https://example.org/static/path/leaflet/dist/images/marker-icon.2273e3d8ad92.png")marker-icon.png
Run Code Online (Sandbox Code Playgroud)

这显然是错误的。

那么解决办法是什么呢?我被告知我们不应该尝试对第三方包的文件名进行哈希处理,否则可能会出现其他损坏。但是,我没有看到任何选项来ManifestStaticFilesStorage排除某些目录被散列。

我创建了以下课程来尝试解决此问题。我在设置中引用此类而不是CompressedManifestStaticFilesStorage.

class MyStorage(CompressedManifestStaticFilesStorage):
    """ This class overrides the built in class and turns off file name hashing …
Run Code Online (Sandbox Code Playgroud)

django static-files django-staticfiles leaflet

6
推荐指数
1
解决办法
865
查看次数

删除/清除白噪声中的静态文件缓存

我似乎无法找到如何刷新白噪声静态文件缓存。它一直给我带来一个问题。即使我删除了导致问题的特定文件,这种情况仍然存在。清单仍然提到丢失的已删除静态文件。我想清除缓存以便可以重新填充它。我正在使用带有 django 的 docker-container

django django-staticfiles docker whitenoise

6
推荐指数
1
解决办法
563
查看次数

从外部javascript正确访问django静态文件

我有一个使用 AngularJS 的 django 应用程序以及一堆 JavaScript 和模板文件。

在我的 django 模板中,我可以使用{% static %}标签来正确引用这些文件,如下所示:

<script src="{% static "angular/myapp.app.js" %}"></script>
Run Code Online (Sandbox Code Playgroud)

然而,外部文件本身显然无法通过 django 的模板框架来解析,因此这不是一个选择。因此,人们最常做的就是对静态路径进行硬编码:

$routeProvider.when('/', {
   // this works but is not ideal
   templateUrl: '/static/pages/some-angular-template.html',  
})
Run Code Online (Sandbox Code Playgroud)

我已经STATIC_URL在某处看到了加载到 javascript 并使用它来构造引用的建议。像这样的东西:

姜戈模板

var STATIC_URL = {{ STATIC_URL }};
function getStaticUrl(templatePath) {
  return STATIC_URL + templatePath;
}
Run Code Online (Sandbox Code Playgroud)

外部JS

$routeProvider.when('/', {
   templateUrl: getStaticUrl('/pages/some-angular-template.html'),
})
Run Code Online (Sandbox Code Playgroud)

这好一点,但仍然不完美,因为它只处理基本路径。如果您想使用类似的东西ManifestStaticFilesStorage(我就是这样做的),那么您仍然无法获得文件的正确分辨率。

对于这个问题有什么好的解决办法吗?我正在考虑的选项:

  • 将所有必要的 URL 引导到 django 模板内的 JS 变量中
  • 使用标签将 url 存储在一些隐藏的 HTML 标记中 …

django django-staticfiles angularjs

6
推荐指数
1
解决办法
1354
查看次数

如何在 Django 中使用节点模块?

我希望在我的 django 项目中使用 date-fns,但不完全确定如何继续 - 我不能依赖 CDN,需要以某种方式安装它。我已经npm init在我的根文件夹中运行,然后是npm install date-fns. 这生成了一个node_modules文件夹和一个package.json文件。

不完全确定此后如何继续。有哪些必要的步骤?

我只是使用

<script src="{% static 'node_modules/date-fns' %}"></script>
Run Code Online (Sandbox Code Playgroud)

在我的 base.html 文件中?

django django-static django-staticfiles

6
推荐指数
1
解决办法
4448
查看次数

删除收集的静态文件

collectstatic几周前运行过,我想删除大部分(99.5%)收集的文件,这样我在部署到生产时就不必存储它们。我尝试过collectstatic --clear,但这删除了它们,然后将删除的文件放回原处(不确定该命令的实际意义是什么。文档声明它用于“删除陈旧的静态文件”,但它肯定不会这样做)。有没有办法删除收集的文件?

我一直在使用Django 文档的此页面来尝试找到解决方案,但没有任何运气。

python django django-staticfiles

6
推荐指数
1
解决办法
8611
查看次数