Оскільки ви хочете використовувати React разом із шаблонами Django, я припускаю, що код React впливатиме лише на певні частини вашої сторінки. Наступні пояснення написані на основі цього припущення.
Перш за все, вам не потрібно розміщувати весь шаблон JS у шаблоні - насправді це було б безлад.
Ви можете створити окремий процес побудови на основі JS за допомогою Webpack ( ознайомтеся з цим посібником ). Це розширює можливості вашого клієнтського коду, дозволяючи вам використовувати модулі CommonJS у браузері, які ви можете безпосередньо витягувати з npm, включаючи React .
Webpack, у свою чергу, генерує пакет (або декілька пакетів, залежно від природи вашого додатка та конфігурації Webpack), який вам потрібно буде включити у ваші шаблони Django за допомогою <script>
тегів, як зазвичай.
Тепер вам потрібно React.render()
зателефонувати, щоб зробити програму React десь у існуючому макеті сторінки. Вам потрібно буде використовувати порожній елемент HTML із певним іменем / класом як точку монтування програми.
Але тут є застереження: ви не можете отримати доступ до модулів CommonJS безпосередньо з браузера або шаблонів Django. Тож ти
- виставляти
React
та додаток до window
об’єкта, або
- створити модуль із кодом клею для обробки ініціалізації програми та виставити цей метод
window
об’єкту.
У будь-якому з випадків вам потрібно буде викликати код ініціалізації безпосередньо з шаблонів (перегляньте приклад коду клею та виклик ініціалізації програми ).
Цей крок ініціалізації також дозволяє передавати змінні, доступні в шаблонах Django, в код JS.
Остаточний шаблон Django виглядатиме приблизно так:
{% load staticfiles %}
{% extends 'base.html' %}
{% block scripts %}
<script type="text/javascript" src="{% static 'path/to/app.bundle.js' %}"></script>
<script type="text/javascript">
window.MyApp.init({el: '.app-mountpoint'});
</script>
{% endblock %}
{% block content %}
<!-- Your template contents -->
<!-- The mount point of your app -->
<div class="app-mountpoint" />
{% endblock %}
І код клею:
var React = require('react');
var MyAppComponent = require('MyAppComponent');
window.MyApp = {
init: function (opts) {
var mountPoint = document.querySelector(opts.el);
React.render(<MyAppComponent />, mountPoint);
}
};
Я знаю, що все це на початку може здатися надзвичайним (навіть більше, ніж порівняно з кількома кроками, які ви робили з Angular), але, повірте, це довго окупається.
Отже, підсумовуючи:
- Напишіть код React в окремі файли JS
- Використовуйте Webpack (використовуючи модулі CommonJS), щоб об’єднати ваш код React
- Включіть набір у ваші шаблони Django
- Візуалізуйте код React, використовуючи клейовий код у шаблонах Django