def process_response(self, request, response):
        content_type = response.get('Content-Type', '').split(';')[0].strip().lower()
        if (not settings.DEBUG or
                content_type not in ['text/html', 'application/xhtml+xml'] or
                not hasattr(response, 'content')):
            return response

        soup = BeautifulSoup(
            smart_str(response.content),
            'html.parser',
        )

        head = getattr(soup, 'head', None)
        if not head:
            return response

        script = soup.new_tag(
            'script', src='http://%s:%d/livereload.js' % (
                livereload_host(),
                livereload_port(),
            )
        )
        head.append(script)

        response.content = str(soup)

        return response
Exemple #2
0
    def process_response(self, request, response):
        content_type = response.get('Content-Type',
                                    '').split(';')[0].strip().lower()
        if (not settings.DEBUG
                or content_type not in ['text/html', 'application/xhtml+xml']
                or not hasattr(response, 'content')):
            return response

        soup = BeautifulSoup(
            smart_str(response.content),
            'html.parser',
        )

        head = getattr(soup, 'head', None)
        if not head:
            return response

        script = soup.new_tag('script',
                              src='http://%s:%d/livereload.js' % (
                                  livereload_host(),
                                  livereload_port(),
                              ))
        head.append(script)

        response.content = str(soup)

        return response
Exemple #3
0
def livereload_script_tag():
    if settings.DEBUG:
        return format_html(
            """<script src="{}:{}/livereload.js"></script>""",
            livereload_host(),
            livereload_port(),
        )
    else:
        return ""
class Command(RunserverCommand):
    """
    Command for running the development server with LiveReload.
    """
    option_args = [('--nolivereload',
                    {'action': 'store_false', 'dest': 'use_livereload', 'default': True,
                     'help': 'Tells Django to NOT use LiveReload.'}),
                   ('--livereload-port',
                    {'action': 'store', 'dest': 'livereload_port', 'type': int,
                     'default': livereload_port(),
                     'help': 'Port where LiveReload listens.'}),
                   ('--livereload-host',
                    {'action': 'store', 'dest': 'livereload_host', 'type': str,
                     'default': livereload_host(),
                     'help': 'Address to LiveReload server.'})
                   ]

    def add_arguments(self, parser):
        super(Command, self).add_arguments(parser)
        for name, kwargs in self.option_args:
            parser.add_argument(name, **kwargs)

    help = 'Starts a lightweight Web server for development with LiveReload.'

    def message(self, message, verbosity=1, style=None):
        if verbosity:
            if style:
                message = style(message)
            self.stdout.write(message)

    def livereload_request(self, **options):
        """
        Performs the LiveReload request.
        """
        style = color_style()
        verbosity = int(options['verbosity'])
        host = '%s:%d' % (
            options['livereload_host'],
            options['livereload_port'],
        )
        try:
            urlopen('http://%s/forcereload' % host)
            self.message('LiveReload request emitted.\n',
                         verbosity, style.HTTP_INFO)
        except IOError:
            pass

    def get_handler(self, *args, **options):
        """
        Entry point to plug the LiveReload feature.
        """
        handler = super(Command, self).get_handler(*args, **options)
        if options['use_livereload']:
            threading.Timer(1, self.livereload_request, kwargs=options).start()
        return handler
    def process_response(self, request, response):
        content_type = response.get('Content-Type', '').split(';')[0].strip().lower()
        if content_type not in ['text/html', 'application/xhtml+xml'] or settings.DEBUG == False:
            return response

        soup = BeautifulSoup(
            smart_str(response.content),
            'html.parser',
        )

        if not getattr(soup, 'head', None):
            return response

        script = soup.new_tag(
            'script', src='http://localhost:%d/livereload.js' % livereload_port(),
        )
        soup.head.append(script)

        response.content = str(soup)

        return response