标签: django-staticfiles

Django:我怎么能在开发模式下gzip静态文件?

我的django.contrib.staticfiles设置似乎没问题,因为所有静态文件都按预期提供.但是,例如.虽然我打开了GZipMiddleware,但是/static/*.css文件没有被gzip压缩.

仅供参考.我的观点html实际上确实被gzip压缩,只有staticfiles应用程序提供的文件不.似乎这些反应不通过中间件链?

django gzip django-staticfiles

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

在Django中显示/渲染静态图像的简单视图

我试图找到使用django的模板上下文加载器显示图像的最有效方法.我的应用程序中有一个静态目录,其中包含图像'victoryDance.gif'和项目级别的空静态根目录(带settings.py).假设我urls.pysettings.py文件中的路径是正确的.什么是最好的观点?

from django.shortcuts import HttpResponse
from django.conf import settings
from django.template import RequestContext, Template, Context

def image1(request): #  good because only the required context is rendered
    html = Template('<img src="{{ STATIC_URL }}victoryDance.gif" alt="Hi!" />')
    ctx = { 'STATIC_URL':settings.STATIC_URL}
    return HttpResponse(html.render(Context(ctx)))

def image2(request): # good because you don't have to explicitly define STATIC_URL
    html = Template('<img src="{{ STATIC_URL }}victoryDance.gif" alt="Hi!" />')
    return HttpResponse(html.render(RequestContext(request)))

def image3(request): # This allows you to load STATIC_URL selectively from the …
Run Code Online (Sandbox Code Playgroud)

python django django-staticfiles django-1.4

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

服务器上的Django中的STATIC_ROOT

当我尝试在webfactional上运行我的服务器上的webapp时,我在2小时内遇到了关于STATIC_URL和STATIC_ROOT的问题.

当我加载网页时,所有请求都能正常运行,除非{{STATIC_URL}}的任何链接正在运行或加载.

因此,firebug上出现的常见错误是:

GET http://mydomain/static/extras/h5bp/js/libs/modernizr-2.5.3.min.js 500 (Internal Server Error) 
Run Code Online (Sandbox Code Playgroud)

我的设置是:

urls.py我什么也没做,而且静态文件也没什么.

settings.py DEBUG = False

STATIC_ROOT = '/home/mydomain/webapps/static_app/'
STATIC_URL = 'http://mydomain/static/'
STATICFILES_DIRS = ()
Run Code Online (Sandbox Code Playgroud)

views.py视图示例

@csrf_exempt
def IndexView(request):
    try:
        request.user.is_authenticated() 
    except  AttributeError:
        return render_to_response('index.html',
                              {'request': request,},
                              context_instance=RequestContext(request))

    return render_to_response('index.html',
                  {'request': request, 'profile' : request.user},
                  context_instance=RequestContext(request))  
Run Code Online (Sandbox Code Playgroud)

index.html找不到代码的一部分

<script src="{{ STATIC_URL }}extras/h5bp/js/libs/modernizr-2.5.3.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

好吧,我遵循以下所有要点:https: //docs.djangoproject.com/en/1.4/howto/static-files/ 和另一个:http: //docs.webfaction.com/software/django/getting- started.html

我正在使用正确安装的应用程序,中间件,template_contexts.

如果我错过了什么,请帮助我搞清楚.

提前致谢!

- 编辑

我不得不说,如果我只是更改DEBUG = True将正常工作.

因为在urls.py上我有这段代码:

if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += patterns('', …
Run Code Online (Sandbox Code Playgroud)

deployment django url webfaction django-staticfiles

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

Django-compressor/django-storages链接被错误地缓存; 到期

我有一个Heroku设置与django压缩器压缩我的CSS和JS文件.我的默认缓存后端是用memcached设置的(在Heroku上实际上是Memcachier).我的静态文件在Amazon S3实例上提供(由django-storages和boto处理).一般来说,我的设置与django-compressor docs中的这个设置一致.

在我的页面中,指向我的压缩文件的链接有一个"过期"查询,该查询似乎是从生成链接起一小时.我不希望所有的CSS或JS请求都没有过期,因为我有一些我不压缩的CSS和JS(当我尝试时它给了我错误......可能是一个不同的问题).

但是,每小时一次链接断开,网站没有更多样式或JS.看起来链接或至少是expires标头正在被缓存而不是重新生成,因此在expires参数传递的时间过后,Amazon不再返回该文件.如果我刷新内存缓存,它会将链接中的expires标头更改为一小时,这会将问题解决一小时,直到它再次过期.

以下是美国东部时间今天,9月18日星期二下午1点39分左右生成的链接示例:https://zen180-static.s3.amazonaws.com/CACHE/css/68d31794a646.css ?Signature=u%2FTxeF7LBBZTDV79YovOjoK2tcw %3D&Expires = 1347993542&AWSAccessKeyId = AKIAIJ7VKLEX7HIMJZCA.首次生成后,页面将继续提供该链接而不进行更改.在美国东部时间2:39左右(即Unix时间1347993542,来自URL中的expires参数),该链接停止工作并发回"过期"XML消息(与现在相同).但是我的页面上仍然存在错误的链接,直到我刷新memcache.

以下是相关设置:

COMPRESS_ENABLED = True

STATICFILES_STORAGE = '[my app's name].storage.CachedS3BotoStorage' (a subclass of S3BotoStorage that is almost identical to the one from django-compressor's docs linked above)

COMPRESS_STORAGE = STATICFILES_STORAGE

COMPRESS_URL = STATIC_URL

CACHES = {
  'default': {
    'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
    'LOCATION': 'localhost:11211',
    'TIMEOUT': 500,
    'BINARY': True,
  }
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<RequestId>81A63F24378ECB5E</RequestId>
<Expires>2012-09-18T18:39:02Z</Expires>
<HostId>lIr5l9Fna95DUfk6hUsWqhO5EQNn6Ayu8BatpEavis8YzLvsaJRru4O8P/50pgMy</HostId>
<ServerTime>2012-09-18T18:59:51Z</ServerTime>
</Error>
Run Code Online (Sandbox Code Playgroud)

python django amazon-s3 django-staticfiles django-compressor

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

在Django中的自定义404/500页面中使用静态文件

我想在我制作的自定义404/500页面上使用一些自定义CSS和图像.但是Django在这些页面中不包含STATIC_URL变量.实现这一目标的最佳方法是什么?我也试过制作一个自定义的404/500视图并渲染一个任意的HTML文件,但它没有那么好用.

django http-status-code-404 django-staticfiles

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

Django项目中第三方静态文件的推荐目录布局是什么?

对于我的Django项目中的第三方(jquery)代码,我采用了静态文件的目录结构,将所有第三方文件放在一个单独lib的子目录中.更具体地说,这就是我的目录树目前的样子:

myproject/
  myproject/
    static/
      css/
        my-own-stylesheet.css
        lib/
          bobs-stylesheet.css
          joes-stylesheet.css
      img/
        my-own-image.png
        lib/
          bobs-image.png
          joes-image.png
      js/
        my-own-javascript.js
        lib/
          bobs-javascript.js
          joes-javascript.js
Run Code Online (Sandbox Code Playgroud)

这意味着要完成两件事:1.将我自己的资产与第三方资产分开.2.分离css,img和js文件.

当然,只要路径都是正确的,这样就可以了,但实际上是否存在Django项目中第三方材料的位置约定?

我也考虑过了

myproject/
  myproject/
    static/
      css/
      img/
      js/
      lib/
        bob/
          css/
          img/
          js/
        joe/
          css/
          img/
          js/
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可能过度思考这个问题,但对此有"最佳实践"吗?

javascript css django django-staticfiles

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

为什么服务静态文件不安全

这可能是一个愚蠢的问题并且有一个明显的答案,但我正在测试我的404和500错误处理程序,这意味着我必须将调试切换为False.我去了Django管理页面,注意到没有提供静态文件.

我知道它们应该通过Apache路由,因为通过Django服务静态文件是不安全的.但是,我不太明白为什么直接通过Django提供静态文件会带来安全风险?

security django static-files django-staticfiles

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

如何在handlebars-django模板中引用静态文件

摘要:

我应该如何引用django模板中把手 - 部件中的静态文件?如果我使用verbatim标签,我可以使用把手,但是我不能使用django的static标签.

细节

在将应用程序转换为Django时,我遇到了一个handelbars.js用于呈现ajax-call-results的部分.通过,其中包括" Django模板中的Handlebars.js ",我发现了{% verbatim %}标签.

一个简单的把手就可以正常工作.但我也有一个部分,根据结果动态显示图像,看起来像这样:

<img src="path/{{ result }}.png">
Run Code Online (Sandbox Code Playgroud)

现在虽然我可以手动设置路径,但是我相信Django最好引用你的静态文件,如下所示:

<img src="{% static 'path/file.png' %}">
Run Code Online (Sandbox Code Playgroud)

static_url不建议只获得常量,例如参见此博客

因此,除非某人有一个真正令人信服的理由来解决它,否则我认为最好使用该{% static %}方法.

天真的解决方案是将两种技术结合起来,并逐字地用verbatim/endverbatim喷涂模板.除了这看起来丑陋,难以辨认并且从一开始看似乎是一个坏主意的事实之外,它也不起作用.

{% verbatim %}
    <!-- handlebars -->
    {% endverbatim %}
    <img src="{% static 'path{% verbatim %}{{ result }}{% endverbatim %}' %}">
    {% verbatim %}
    <!-- handlebars -->
{% endverbatim %}
Run Code Online (Sandbox Code Playgroud)

结果是泪流满面

TemplateSyntaxError at/
无法解析余数:''path {%'from''path {%'

有可能在后端生成正确的静态URL,并进行渲染.但是后端不应该知道我们想要在模板中显示什么图像.

只有解决方案可能是使用'relative'字符串(例如path/result.png)向后端额外调用后端,并要求正确的静态链接?这并不难,但需要额外的电话,但情况并非如此.

那么我该如何正确引用这些静态文件呢?

django templates django-templates django-staticfiles handlebars.js

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

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 如何使用带有静态/模板的 npm 模块

我最近在我的项目中添加了npm,以便更好地跟踪我的 js 依赖项。以前我只是将 git 克隆到我的 static/vendor 文件夹。

我还添加了gulp,但现在只让它做你好世界的事情。看起来很简单——它可以查看文件、缩小资产、编译 Sass。最终我可能会切换到Webpack,但是gulp很简单并且现在可以工作。我不想使用django-compressordjango-pipeline


所以假设我跑去npm install vis拉取 visjs。它被添加node_modulespackage.json依赖项中,并且记录被添加到依赖项中。

A)我是否在模板脚本中的 node_mods 中正确引用了 vis/dist?

<script src="/node_modules/vis/dist/min-vis.js' %}"></script>

# right now it's <script src="{% static 'vendor/min-vis.js' %}"></script
Run Code Online (Sandbox Code Playgroud)

B) gulp 是否应该监听 package.json 依赖项的更改,并在看到更改时将 vis/dist 复制到 static/vendor 或 static/js?


我一直看到人们在谈论 npm 和 gulp 时谈论处理 STATICFILE_DIRS。现在我的只是设置为以下。这会改变吗?

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
Run Code Online (Sandbox Code Playgroud)

django frontend npm django-staticfiles gulp

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