Вы когда-нибудь пытались что-то сделать? И под чем-то я подразумеваю именно это, буквально что угодно. Я был бы удивлен, если бы вы этого не сделали (но опять же, кто я такой, чтобы судить, верно?) В любом случае, дополнительный вопрос, вы когда-нибудь терпели неудачу, пытаясь сделать это «что-то»? Опять же, я почти уверен, что у вас есть, а если нет, то вы должны быть либо буквальным богом среди мужчин, которые не должны тратить свое время на чтение «глупых» статей о реализации 3D-моделей с помощью django, либо кем-то, кому нужно чаще выходить из зоны комфорта (выбирай). В любом случае, ради простоты этой статьи я предполагаю, что вы ответили «Да» на оба вышеупомянутых вопроса.
ОТКАЗ…
ОШИБКА…
ОШИБКА…
Заметили, как я намеренно увеличивал это слово с течением времени? Художник мог бы описать это как символическое или значащее , утверждая, что это должно отражать то, как я, как личность, чувствовал себя все большим и большим неудачником, чем больше я пытался и неизбежно терпел неудачу. Я, как человек, не являющийся художником, назвал бы этого самого художника «претенциозным» и «слишком усердно пытающимся найти внутренний смысл там, где его нет». Но единственное, что моя фетровая шляпа в соломенном чулке сделала правильно, это то, что я потерпел неудачу, и не совсем немного; Я терпел неудачу огромное количество раз. Я терпел неудачу так много раз, что почти единолично стал причиной краха всего нашего проекта (почти ключевое слово). Но, как и во всем, неудача часто ведет к обучению, и падение никогда не должно быть концом, а скорее должно служить мотивацией, чтобы взять себя в руки и продолжать двигаться вперед. И это именно то, что я сделал ... так что теперь вам не нужно ... Вы можете поблагодарить меня позже
Итак, как именно можно импортировать 3D-модели в проект django? Что ж, это сложно, и мое текущее решение в лучшем случае дерганое, поэтому моя лучшая рекомендация: если у вас есть время и вы можете позволить себе расходы, переключитесь на другой фреймворк, который лучше поддерживает ваши цели. Честно говоря, это избавит вас от многих хлопот. Однако, если вы не можете, то первое, что вам нужно понять, это то, как работает django. По сути, в очень простом виде django работает, реализуя серию слоев, которые обрабатывают разные части вашего приложения. Во-первых, и на самом низком уровне у вас есть ядро/бэкэнд django, которое, говоря простым языком, представляет собой набор файлов и библиотек Python, которые вызывают друг друга для выполнения определенных запросов к базе данных или для отображения различных шаблонов HTML, которые сами по себе являются динамическими, используя еще раз , python (хотя это больше похоже на собственную версию языка python от django).
Теперь также важно понять, как работает наша библиотека JavaScript для 3D-рендеринга. И хотя я не могу говорить о вашей конкретной библиотеке, я могу сказать о BabylonJS, который я использовал во время реализации. BabylonJS нужны два основных элемента для рендеринга 3D-модели. Ему необходимо знать конкретную папку, в которой находится ваша 3D-модель, а также имя этого конкретного объекта. Заставить BabylonJS отображать статическую 3D-модель относительно легко, это требует некоторой настройки и некоторого времени, потраченного на чтение документации, но через некоторое время вы сможете настроить сцену самостоятельно.
Основная проблема возникает при попытке реализовать код BabylonJS с кодом django. Видите ли, django может прекрасно реализовывать файлы JS, используя представление, которое вызывает файл шаблона HTML, и этот файл шаблона может затем вызвать соответствующий файл JS, который содержит логику для рендеринга вашей 3D-модели. Однако django не может передать переменную непосредственно в JavaScript, потому что это выходит за его рамки. Представление django может напрямую вызывать только файл HTML, который затем вызывает файл JS. И из-за этого, насколько мне известно, нет способа напрямую передать путь к файлу или URL-адрес, относящийся к 3D-модели, в файл JavaScript; это означает, что мы не можем легко заставить нашу библиотеку JS динамически отображать 3D-модели на основе путей к файлам, хранящихся в базе данных. Единственный способ сообщить нашему JS-файлу, где хранится 3D-модель, — это напрямую сослаться на нее в HTML-документе, но это решение может отображать путь к файлу на экране, что не совсем безопасно.
Похоже, мы сейчас на распутье, либо мы публично показываем путь к нашей 3D-модели, либо не делаем нашу визуализацию динамической. Обычно это был момент в статье, где я выявлял свою последнюю оплошность, ту уловку, которую я намеренно упустил ранее, чтобы вызвать у читателя напряжение и заставить его читать до конца. Правда в том, что, к сожалению, это не так. У меня нет волшебного решения. В моем случае оказалось совершенно нормально ссылаться на переменную пути к файлу в HTML-документе с помощью тегов ‹script›‹/script›. Все, что мне нужно было сделать, это создать фрагмент кода в HTML-документе, который принимал переменную python, анализировал ее, а затем ссылался на эту же переменную в моем внешнем JS-файле, который отображает 3D-модель. Позвольте мне показать вам очень быстро, как это выглядит
‹HTML›
‹скрипт›
пусть модельный путь = {{модель.путь}};
пусть имя модели = путь к модели.заменить («Информация о не нужном пути», «»); путь к модели.заменить (имя модели, "")
‹/скрипт›
‹холст›‹/холст›
Затем укажите ваши переменные пути к модели и имени модели в ваших файлах JS.
И это все. Действительно. Я думаю, что иногда самые простые и ненадежные решения — это те, которые работают.