Динамические модели Django [дубликаты]

"для итерации HashMap в javascript с помощью jstl" - Невозможно

JSTL выполняется на стороне сервера вашим контейнером сервлета, для которого Javascript - это просто текст, который будет пропущен, тогда как JavaScript выполняется на клиенте где JSTL неизвестен. После того, как сервер завершит обработку JSTL, будет создан сгенерированный HTML (если есть) из JSTL вместе с другим JavaScript / HTML.

Например, если у вас есть это,

  & lt; c: forEach var = "myItem" items = "$ {myCollection}" & gt;  alert ('& lt; c: out value = "$ {myItem.id}" & gt;') & lt; c: if test = "$ {myItem.id == 0}" & gt;  предупреждение ( "ноль");  & Lt; / с: если & GT;  & Lt; / с: Foreach & GT;   

Если идентификаторы компонентов в наборе равны 0, 1, 2, сервер делает следующее на стороне клиента, выполнив вышеуказанный код,

  alert ('0') alert ('zero') alert ('1') alert ('2')  

Теперь браузер предоставит вам 4 предупреждения при загрузке страницы ( что, если у вас есть 10000 элементов, вы будете отображать 10000 предупреждений в браузер). Итак, дело в том, что вы не повторили Java-сборку в JavaScript, вы просто сгенерировали серьезные заявления Javascript на сервере, итерации коллекции с использованием JSTL, и вы предоставили эти Javascript-инструкции вместе с другим содержимым html в браузере.

4
задан singleton 5 August 2015 в 14:27
поделиться

1 ответ

Существует страница wiki по созданию моделей динамически, хотя прошло некоторое время с момента последнего обновления:

DynamicModels Django

Есть также несколько приложений, предназначенных для этого прецедента, но я не думаю, что кто-либо из них активно поддерживается:

Django Packages: Динамические модели

Я понимаю, что если вы уже настроены на Django, это не очень полезно, но это пример использования, для которого Django не очень хорош. Возможно, было бы более дорого бороться с абстракциями, предоставляемыми модельным слоем Django, чем просто использовать psycopg2 или любой другой адаптер, подходящий для ваших данных.

В зависимости от того, какие операции вы собираетесь выполнять ваши данные, также может быть разумнее использовать одну модель с индексированным полем, которая позволяет различать, в какой таблице была эта строка, а затем оглашать данные этим столбцом.

Если вам все еще нужно для этого общая идея была бы следующей:

  1. Создайте метакласс, который расширяет модельный ряд Django. Этот метакласс, который вы использовали бы в качестве фабрики для своих реальных моделей.
  2. Рассмотрите материал, упомянутый на этой странице wiki, как обход проблемы с app_label.
  3. Создайте и выполните sql для создания модель, также показанная на странице wiki.
1
ответ дан Tomás Mena 17 August 2018 в 11:51
поделиться
  • 1
    Большое спасибо Томасу. Пакеты, как вы упомянули, не поддерживаются, поэтому я предпочитаю не использовать их. Страница вики - это в основном то, на чем я основал мой подход, и, действительно, мой следующий шаг - следовать ему поближе, как вы предложили. Sharding также интересная идея, но мне она не нужна в настоящее время, и кажется, что это слишком сложно сделать, потому что Django не просто поддерживает динамическое моделирование. – singleton 9 August 2015 в 07:13
Другие вопросы по тегам:

Похожие вопросы: