flask -assets - Как сохранить файлы c js указанного приложения в другом приложении от использования другим приложением - PullRequest
0 голосов
/ 14 января 2020

Я делал это в прошлом, но я полностью забыл, как я это сделал. Я разрабатываю сервер flask, который содержит несколько приложений с файлами stati c, связанными вместе, но я хочу, чтобы файлы js / css в папке stati c каждого приложения использовались только маршрутами, определенными в этом файл init.py приложения.

Предположим, у меня есть appA и appB:

app
- static // this contains my common js/css files
- apps
 - appA
   - __init__.py
   - static // appA's js/css files
 - appB
  - __init__.py
  - static // appB's js/css files

И я go для "localhost: 8000: / appA" (при условии, что маршрут i определил). В его js файле у меня есть

$(document).ready(function(params) {
    console.log('appA ready');
});

И если я go на "localhost: 8000 / appB" и он имеет в своем js файле

$(document).ready(function(params) {
    console.log('appB ready');
});

Нет Независимо от того, какой маршрут я использую, в консоли будут напечатаны «appA ready» и «appB ready». Теперь я знаю, что это имеет смысл. В конце концов, я собрал и свел их вместе. Но я знаю, что в прошлом я использовал связки в прошлом, но смог выделить, какое приложение использовало какой файл stati c.

Смысл в том, чтобы использовать базовый каталог stati c для обычных вещей и каталога stati c приложения для вещей, определяемых приложением c вещей.

Мои активы настроены таким образом

from app.apps.appA import appA
from app.apps.appA import appA_js, appA_css

from app.apps.appB import appB
from app.apps.appB import appB_js, appB_css


flask_app.register_blueprint(appA)
flask_app.register_blueprint(appB)

globals_js = ('js/utils/jquery-3.4.1.min.js',
          'js/utils/socket.io.js',
          'js/utils/*.js')
globals_css = ('css/utils/common.css',
           'css/utils/*.css')

assets = Environment(flask_app)
bundle_globals_js = Bundle(*globals_js + appA_js + appB_js, filters='jsmin', output='dist/local_js.js')
bundle_globals_css = Bundle(*globals_css + appA_css + appB_css, filters='cssmin', output='dist/local_css.css')

assets.register('base_js', bundle_globals_js)
assets.register('base_css', bundle_globals_css)

Я чувствую, что что-то есть в моем наборе активов неправильная конфигурация Или это, или как я импортирую файлы в моем html.

<head>
    {% assets "base_js" %}
        <script type="text/javascript" src="{{ ASSET_URL }}"></script>
    {% endassets %}
    {% assets "base_css" %}
        <link rel="stylesheet" href="{{ ASSET_URL }}"/>
    {% endassets %}
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{title}}</title>
</head>

. Этот код заголовка используется каждым конкретным c html файлом appA и appB. Здесь может быть просто фундаментальное недоразумение о том, как используются комплекты. Я просто хочу указать общий каталог stati c, но при этом мои приложения могут использовать собственные файлы js / css в сочетании с этими базовыми файлами.

Может ли кто-нибудь указать мне правильное направление?

Спасибо!

1 Ответ

1 голос
/ 16 января 2020

Я понял это, хотя не так, как я помню, как это делал.

Вместо того, чтобы связать все мои файлы stati c вместе в "base_ js" или "base_ css" пакет, я создал отдельные пакеты с уникальными именами.

bundles = {
   'globals_js': Bundle('js/utils/jquery-3.4.1.min.js',
                     'js/utils/socket.io.js',
                     'js/utils/*.js',
                     filters='jsmin',
                     output='dist/local_global_js.js'),

   'globals_css': Bundle('css/utils/common.css',
                     'css/utils/*.css',
                     filters='cssmin',
                     output='dist/local_global_css.css'),       

   'appA_js': Bundle(*appA_js, 
                      filters='jsmin',
                      output='dist/local_appA_js.js'),

   'appA_css': Bundle(*appA_css, 
                       filters='cssmin',
                       output='dist/local_appA_css.css'),          

   'appB_js': Bundle(*appB_js, 
                               filters='jsmin',
                               output='dist/local_appB_js.js'),

   'appB_css': Bundle(*appB_css, 
                       filters='cssmin',
                       output='dist/local_appB_css.css')

}

Теперь я указываю базовый файл html, который добавляет глобальные активы в заголовок

<head>
    {% assets "globals_js" %}
        <script type="text/javascript" src="{{ ASSET_URL }}"></script>
    {% endassets %}
    {% assets "globals_css" %}
        <link rel="stylesheet" href="{{ ASSET_URL }}"/>
    {% endassets %}
</head>
<body>        
 {%block data %}{% endblock %}

</body>
</html>

и в appA или appB Я расширяю этот базовый файл html и добавляю свои ресурсы c stati c в блок расширенного кода.

{% extends "base.html" %}

{% block data %}
{% assets "appA_js" %}
    <script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "appA_css" %}
    <link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}

{% endblock %}

Теперь appA / appB загружает только свои соответствующие файлы stati c.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...