标签: static-files

如何在Flask中提供静态文件

所以这很尴尬.我有一个应用程序,我把它放在一起,Flask现在它只是提供一个静态HTML页面,其中包含一些CSS和JS的链接.我无法在文档Flask中找到返回静态文件的位置.是的,我可以使用,render_template但我知道数据没有模板化.我曾经想过send_file或者url_for是对的,但是我无法让它们发挥作用.与此同时,我正在打开文件,阅读内容,并Response使用适当的mimetype来装配:

import os.path

from flask import Flask, Response


app = Flask(__name__)
app.config.from_object(__name__)


def root_dir():  # pragma: no cover
    return os.path.abspath(os.path.dirname(__file__))


def get_file(filename):  # pragma: no cover
    try:
        src = os.path.join(root_dir(), filename)
        # Figure out how flask returns static files
        # Tried:
        # - render_template
        # - send_file
        # This should not be so non-obvious
        return open(src).read()
    except IOError as exc:
        return str(exc)


@app.route('/', methods=['GET'])
def metrics():  # pragma: …
Run Code Online (Sandbox Code Playgroud)

python static-files flask

453
推荐指数
14
解决办法
53万
查看次数

如何使用django-storages和Amazon S3设置Django项目,但是对于静态文件和媒体文件有不同的文件夹?

我正在配置一个Django项目,该项目使用服务器文件系统来存储应用程序静态文件(STATIC_ROOT)和用户上传的文件(MEDIA_ROOT).

我现在需要在亚马逊的S3上托管所有内容,所以我为此创建了一个存储桶.使用django-storagesboto存储后端,我设法收集静态上传到S3斗:

MEDIA_ROOT = '/media/'
STATIC_ROOT = '/static/'

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'KEY_ID...'
AWS_SECRET_ACCESS_KEY = 'ACCESS_KEY...'
AWS_STORAGE_BUCKET_NAME = 'bucket-name'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

然后,我遇到了一个问题:MEDIA_ROOT并且STATIC_ROOT没有在存储桶中使用,因此存储桶根目录包含静态文件和用户上载的路径.

那么我可以设置:

S3_URL = 'http://s3.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = S3_URL + STATIC_ROOT
MEDIA_URL = 'S3_URL + MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)

并在模板中使用这些设置,但在S3中存储时,静态/媒体文件没有区别django-storages.

怎么做到这一点?

谢谢!

django amazon-s3 static-files django-settings django-storage

90
推荐指数
3
解决办法
3万
查看次数

如何使用NGINX直接提供所有现有静态文件,但将其余部分代理到后端服务器.

location / {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    if (-f $request_filename) {
        access_log off;
        expires 30d;
        break;
        }

    if (!-f $request_filename) {
        proxy_pass http://127.0.0.1:8080; # backend server listening
        break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

上面将使用Nginx直接提供所有现有文件(例如Nginx只显示PHP源代码),否则将请求转发给Apache.我需要从规则中排除*.php文件,以便*.php的请求也传递给Apache并进行处理.

我希望Nginx处理所有静态文件和Apache来处理所有动态的东西.

编辑:有白名单的方法,但它不是很优雅,看到所有这些扩展,我不希望这样.

location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
    access_log off;
    expires 30d;
    }
location / {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;
    }
Run Code Online (Sandbox Code Playgroud)

编辑2:在使用nginx的更新版本try_files,而不是http://wiki.nginx.org/HttpCoreModule#try_files

reverse-proxy nginx static-files

76
推荐指数
3
解决办法
11万
查看次数

Django的收藏有什么意义?

这可能是一个愚蠢的问题,但它并没有点击我的脑袋.

在Django中,惯例是将您的应用程序特有的所有静态文件(即css,js)放入名为static的文件夹中.所以结构看起来像这样:

mysite/
    manage.py
    mysite/ --> (settings.py, etc)
    myapp/ --> (models.py, views.py, etc)
        static/
Run Code Online (Sandbox Code Playgroud)

在mysite/settings.py我有:

STATIC_ROOT = 'staticfiles'
Run Code Online (Sandbox Code Playgroud)

所以当我运行命令时:

python manage.py collectstatic   
Run Code Online (Sandbox Code Playgroud)

它在根级别创建一个名为staticfiles的文件夹(与myapp /目录相同)

这有什么意义?是不是只创建了我所有静态文件的副本?

python django static-files django-staticfiles collectstatic

69
推荐指数
4
解决办法
3万
查看次数

Django - 找不到静态文件

我已经看过几个关于这个问题的帖子,但没有找到我的解决方案.

我正在尝试在Django 1.3开发环境中提供静态文件.

这是我的设置

...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
  '/static/',
)
...
Run Code Online (Sandbox Code Playgroud)

我的urls.py

urlpatterns = patterns('',
...
  url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root', settings.STATIC_ROOT}
  ),
...
);
Run Code Online (Sandbox Code Playgroud)

我的/ home/glide/Documents/django/cbox/static /目录就像

css
  main.css
javascript
image
Run Code Online (Sandbox Code Playgroud)

尝试访问http://127.0.0.1:8000/static/css/main.css时出现404错误.

我是否必须单独指定css,javascript和图像的模式?

django static-files

63
推荐指数
7
解决办法
8万
查看次数

Django - 无法加载静态CSS文件

runserver在我的本地计算机(Mac OS X)上运行Django的开发服务器()并且无法加载CSS文件.

以下是settings.py中的相关条目:

STATIC_ROOT = '/Users/username/Projects/mysite/static/'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
'/Users/thaymore/Projects/mysite/cal/static',
)

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

INSTALLED_APPS = (
# other apps ...
'django.contrib.staticfiles',
)
Run Code Online (Sandbox Code Playgroud)

在我的views.py中,我正在请求上下文:

return render_to_response("cal/main.html",dict(entries=entries),context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

在我的模板中{{ STATIC_URL }}正确呈现:

<link type="text/css" href="{{ STATIC_URL }}css/main.css" />
Run Code Online (Sandbox Code Playgroud)

变成:

<link type="text/css" href="/static/css/main.css"/>
Run Code Online (Sandbox Code Playgroud)

这是文件实际所在的位置.我还跑去collectstatic确保收集所有文件.

我的urls.py中还有以下几行:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns += staticfiles_urlpatterns()
Run Code Online (Sandbox Code Playgroud)

我是Django的新手,所以我可能会错过一些简单的东西 - 感谢任何帮助.

python django static-files

51
推荐指数
3
解决办法
7万
查看次数

使用nginx从给定目录的子目录提供静态文件

我的.html服务器上有几组静态文件,我想使用nginx直接提供它们.例如,nginx应该提供以下模式的URI:

www.mysite.com/public/doc/foo/bar.html
Run Code Online (Sandbox Code Playgroud)

使用.html位于的文件/home/www-data/mysite/public/doc/foo/bar.html.您可以将其foo视为集名称,以及bar此处的文件名.

我想知道下面的nginx配置是否可以完成这项工作:

server {
    listen        8080;
    server_name   www.mysite.com mysite.com;
    error_log     /home/www-data/logs/nginx_www.error.log;
    error_page    404    /404.html;

    location /public/doc/ {
        autoindex         on;
        alias             /home/www-data/mysite/public/doc/;
    }

    location = /404.html {
        alias             /home/www-data/mysite/static/html/404.html;
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,模式的所有请求/public/doc/.../....html都将由nginx处理,如果找不到任何给定的URI,www.mysite.com/404.html则返回默认值.

nginx static-files

51
推荐指数
2
解决办法
11万
查看次数

在Play中路由到静态文件!2.0

我正在尝试建立一个特定静态文件的路由,但我正在尝试的所有内容都以错误结束.

我做了3次不同的尝试:

1.

GET /file   staticFile:/public/html/file.html
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Compilation error
string matching regex `\z' expected but `:' found
Run Code Online (Sandbox Code Playgroud)

2.

GET /file   controllers.Assets.at(path="/public/html", "file.html")
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Compilation error
Identifier expected
Run Code Online (Sandbox Code Playgroud)

3.

GET /file   controllers.Assets.at(path="/public/html", file="file.html")
Run Code Online (Sandbox Code Playgroud)

我得到的错误:(这是最奇怪的)

Compilation error
not enough arguments for method at: (path: String, file: String)play.api.mvc.Call. Unspecified value parameter file.
Run Code Online (Sandbox Code Playgroud)

关于第3个错误的奇怪部分是它被抛出在以下行的不同文件(app/views/main.scala.html)中:

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
Run Code Online (Sandbox Code Playgroud)

所有这些方法都可以在stackoverflow上的官方文档和/或线程中找到.我在这里错过了什么?

谢谢.

routes static-files playframework playframework-2.0

32
推荐指数
5
解决办法
3万
查看次数

防止IIS通过ASP.NET管道提供静态文件

我的css,js,图像文件的请求正在通过ASP.NET管道提供.我认为IIS默认避免这种情况,但是我在Application_AuthenticateRequest断点上看到了请求,并且不需要实际验证这些请求.我看到了改变这种行为的相互矛盾的方法 - 最好的方法是什么?

asp.net-mvc forms-authentication static-files iis-7.5

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

使用express.js在node.js中提供html的最佳做法是什么?

我目前正在我的app.js/server.js文件中提供所有我的HTML,如下所示:

app.get('/', function(req, res) {
    res.render('index.html');
});
app.get('/about', function(req, res) {
    res.render('about.html');
});
app.get('/projects', function(req, res) {
    res.render('projects.html');
});
Run Code Online (Sandbox Code Playgroud)

我想如果我有15个以上的HTML页面,这可能不是调用它们的最佳方式.有没有更好的方法从另一个文件或位置提供服务,并使用导出或其他东西只能在app.js上调用一个函数或其他东西.它可能是路由的用途,但也许我不太了解它.

(添加了同一文件中的更多代码)

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/public');

// used below code to render html files
app.engine('html', require('ejs').renderFile);

app.set('view engine', 'ejs');
app.use(express.favicon("public/img/favicon.ico"));
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
Run Code Online (Sandbox Code Playgroud)

html static-files node.js express

28
推荐指数
2
解决办法
5万
查看次数