Ну, неугомонный я, хочется как попроще. Я уже сделал один вариант публикации Ember фронэнда на Django бакэнде. Теперь еще один вариант.
Структура разработки Django - Ember сайта такая:
SITENAME (это название сайта)
|
|-back (это Django проект, здесь внути и будет находится static)
|
|-front (это Ember проект)
1) На Django бакэнде добавить:
в settings.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_URL = '/static/'
в urls.py
from .views import index
urlpatterns = [
...
url(r'^$', index, name='index'),
url(r'^(?P<path>.*)/$', index),
]
во views.py
from django.shortcuts import render
def index(request, path=''):
response = render(request, 'index.html')
return response
2) На Ember фронтэнде
Просто запускаем в папке front:
$ ember serve --output-path ../back/static/
Используя ключ --output-path ../back/static/ можно заменить путь вывода скомпиленного фронэнда (по умолчанию папка dist).
После запуска фронтэнда, видим, что в папке back создалась папка static и внутри лежит файл index.html и папка assets (в ней лежат js скрипты и css фронтэнда).
Нам нужен файл index.html, копируем его в back/templates, открываем его и видим строки, которые ссылаются на assets
<link rel="stylesheet" href="/assets/vendor.css">
<link rel="stylesheet" href="/assets/front.css">
<script src="/assets/vendor.js"></script>
<script src="/assets/front.js"></script>
Т.к. django не знает ничего про папку assets, зато знает где находится static (в котором теперь есть assets), то надо просто добавить перед assets - static. Вот что должно получится:
<link rel="stylesheet" href="/static/assets/vendor.css">
<link rel="stylesheet" href="/static/assets/front.css">
<script src="/static/assets/vendor.js"></script>
<script src="/static/assets/front.js"></script>
Теперь и на бакэнде (localhost:8000) можно наблюдать фронтэнд.
Эти же настройки можно использовать не только при разработке, но и при деплое, используя команду:
$ ember build -prod --output-path ../back/static/
Ну и скопировать и отредактировать index.html, как было описано выше.
Можно добавить в файл ember-cli-build.js
var app = new EmberApp(defaults, {
fingerprint: {
prepend: '/static/'
}
});
Строка prepend: '/static/' позволит не добавлять префикс static в index.html.
Теперь, после выполнения команды
$ ember build -prod --output-path ../back/static/
в index.html уже будут строки похожие на такие
<link rel="stylesheet" href="/static/assets/ember-app-cd507f10f1eb6d96c8c44db034f28a4f.css">
<script src="/static/assets/ember-app-03dac61f48f7ccdae5ae0aa2db976ec8.js"></script>
и, теперь, достаточно будет скопировать index.html в templates без всяких изменений.
На мой взгляд, второй вариант получился проще.
Чтобы на фронтэнде при запуске не вспоминать путь --output-path ../back/static/ я сделал shell скрипт в папке front:
- Создаю файл run.sh
$ vi run.sh
- Добавляю туда следующие строки:
#!/bin/bash
ember serve --output-path ../back/static/
- Делаю файл run.sh исполняемым
$ chmod +x run.sh
Теперь можно запускать фронтэнд командой
./run.sh
Структура разработки Django - Ember сайта такая:
SITENAME (это название сайта)
|
|-back (это Django проект, здесь внути и будет находится static)
|
|-front (это Ember проект)
1) На Django бакэнде добавить:
в settings.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_URL = '/static/'
в urls.py
from .views import index
urlpatterns = [
...
url(r'^$', index, name='index'),
url(r'^(?P<path>.*)/$', index),
]
во views.py
from django.shortcuts import render
def index(request, path=''):
response = render(request, 'index.html')
return response
2) На Ember фронтэнде
Просто запускаем в папке front:
$ ember serve --output-path ../back/static/
Используя ключ --output-path ../back/static/ можно заменить путь вывода скомпиленного фронэнда (по умолчанию папка dist).
После запуска фронтэнда, видим, что в папке back создалась папка static и внутри лежит файл index.html и папка assets (в ней лежат js скрипты и css фронтэнда).
Нам нужен файл index.html, копируем его в back/templates, открываем его и видим строки, которые ссылаются на assets
<link rel="stylesheet" href="/assets/vendor.css">
<link rel="stylesheet" href="/assets/front.css">
<script src="/assets/vendor.js"></script>
<script src="/assets/front.js"></script>
Т.к. django не знает ничего про папку assets, зато знает где находится static (в котором теперь есть assets), то надо просто добавить перед assets - static. Вот что должно получится:
<link rel="stylesheet" href="/static/assets/vendor.css">
<link rel="stylesheet" href="/static/assets/front.css">
<script src="/static/assets/vendor.js"></script>
<script src="/static/assets/front.js"></script>
Теперь и на бакэнде (localhost:8000) можно наблюдать фронтэнд.
Эти же настройки можно использовать не только при разработке, но и при деплое, используя команду:
$ ember build -prod --output-path ../back/static/
Ну и скопировать и отредактировать index.html, как было описано выше.
Можно добавить в файл ember-cli-build.js
var app = new EmberApp(defaults, {
fingerprint: {
prepend: '/static/'
}
});
Строка prepend: '/static/' позволит не добавлять префикс static в index.html.
Теперь, после выполнения команды
$ ember build -prod --output-path ../back/static/
в index.html уже будут строки похожие на такие
<link rel="stylesheet" href="/static/assets/ember-app-cd507f10f1eb6d96c8c44db034f28a4f.css">
<script src="/static/assets/ember-app-03dac61f48f7ccdae5ae0aa2db976ec8.js"></script>
и, теперь, достаточно будет скопировать index.html в templates без всяких изменений.
На мой взгляд, второй вариант получился проще.
Чтобы на фронтэнде при запуске не вспоминать путь --output-path ../back/static/ я сделал shell скрипт в папке front:
- Создаю файл run.sh
$ vi run.sh
- Добавляю туда следующие строки:
#!/bin/bash
ember serve --output-path ../back/static/
- Делаю файл run.sh исполняемым
$ chmod +x run.sh
Теперь можно запускать фронтэнд командой
./run.sh
Комментариев нет:
Отправить комментарий