8

Django で gulp-liveReloadを使用したいのですが、可能ですか? Grunt の代替手段があることを読みましたが、Gulp を使用する方が簡単です。

ありがとう、

4

6 に答える 6

1

また、djangoサーバーを起動し、ブラウザのライブリロードを同時に機能させる方法の答えを見つけるのに苦労していましたが、達成するのは簡単であることがわかりました(WindowsとLinuxでクロスプラットフォームで作業している場合でも):

//jshint node:true
'use strict';

var gulp          = require('gulp'),
    ....
    gutil         = require('gulp-util');

var browserSync = require('browser-sync').create();

var serverUrl = 'localhost:8000';

var exec = require('child_process').exec;

var isProd = gutil.env.type === 'prod';

....
gulp.task('sass', function() {
  return sass(sources.sass, {
    compass: true,
    sourcemap: true,
    style: isProd ? 'compressed': 'expanded',
  })
  ....
  .pipe(sourcemaps.write('.'))
  .pipe(gulp.dest(targets.css))
  .pipe(browserSync.stream());
});
....

gulp.task('watch', function() {
  gulp.watch(sources.sass, ['sass']);
  gulp.watch(sources.pug, ['html'])
    .on('change', browserSync.reload);
  gulp.watch(sources.ts, ['typescript'])
    .on('change', browserSync.reload);

  // update browser on python change
  gulp.watch('website/**/*.py')
    .on('change', browserSync.reload);
});


// start django server
gulp.task('webserver', function() {
  var isWin = /^win/.test(process.platform);
  var cmd =  '. venv/bin/activate && PYTHONUNBUFFERED=1 ';

  if (isWin) { //for Windows
    cmd = 'venv\\Scripts\\activate.bat && set PYTHONUNBUFFERED=1 && ';
  }

  var proc = exec(cmd + 'python manage.py runserver ' + serverUrl);
  proc.stderr.on('data', function(data) {
    process.stdout.write(data);
  });

  proc.stdout.on('data', function(data) {
    process.stdout.write(data);
  });
});


// start livereload
gulp.task('browser-sync', ['typescript', 'html', 'sass', 'webserver'], function() {
    browserSync.init({
      proxy: serverUrl,
      port: 8080,
      reloadDelay: 300,
      reloadDebounce: 500
    });
});
于 2016-06-18T20:35:14.707 に答える
1

このdjango-livereloadを試しましたか?

于 2014-09-30T07:22:32.087 に答える
0

Frank Wile の答えを試しましたが、問題がありました。テンプレートでうまくいった唯一の方法は、.pyファイルを保存してからテンプレートに変更を加えた場合です。

を呼び出す前に本質的にファイルをtouches する関数を使用して、フランクのアプローチを拡張しました。.pylivereload.changed()

function touchPy() {
    gulp.src(appName + '/__init__.py')
        .pipe(gulp.dest(appName));
}

gulp.task('watch', function() {
    livereload.listen();

    // Changes to .css files works fine w/ Frank's approach
    gulp.watch(paths.static).on('change', livereload.changed);

    // Changes to .html files don't trigger a runserver refresh w/o touching a .py file 
    gulp.watch(paths.templates).on('change', function(file) {
        touchPy();
        livereload.changed(file);
    });
});
于 2015-11-20T01:52:19.310 に答える