LINUX.ORG.RU

Динамическое добавление в views и urls

 


0

1

Здравствуйте, я новичок в django. Вопрос такой: существуют ли стандартные способы динамического добавления функций в views и адресов в urls приложения, используя поля бд. Уточнение: допустим есть функции написаные мной в views. Добавилось новое поле в бд, и по какому-нибудь событию, присходит автоматическое добавление кода новой функции в views. Тоже касается и urls - которые будут указывать на новую функцию. То есть в целом, по новому полю происходит автоматическое программирование новой страницы. Спасибо за помощь.



Последнее исправление: cetjs2 (всего исправлений: 1)

С django-cms можно запилить нечто подобное, например. Однако и там, чтобы url'ы обновились, нужно перезагрузить проект.

heilkitty ★★
()

С перезапуском проекта точно можно, но оно тебе надо?

Скорее всего ты правда не правильно проектируешь, почему нельзя предусмотреть общую логику для твоих новых страниц и где-нибудь в одном вью разруливать?

Kalashnikov ★★★
()
Ответ на: комментарий от stevejobs

Тупее комментария не придумать. Зачем тогда форум? Каждый сам разберется ведь: «Если джанга что-то не умеет, то виноват пользователь.»

djfire
() автор топика

Пока что это на стадии идеи, а идея такова: В админке добавляется новая запись в таблицу, например это записи пунктов меню. После добавления этой записи по какому-нибудь событию все создается - добавляется адрес в urls.py и функция представления в views.py. То есть добавил запсиь в бд - получил новый, уже рабочий пункт меню. Спасибо за ответы и похоже да - не в ту сторону я думал. Теперь думаю как регуляркой обойтись.

djfire
() автор топика

Сравнительно тёмной магией на питоне — запросто. Делать запрос к базе можно хоть каждый раз при загрузке views, ну или через любой промежуток, по inotify или любому событию. Но это немного не django.

x3al ★★★★★
()
Ответ на: комментарий от djfire

Если админкой — проще решить на уровне модели джанги, а не базы данных. Есть же хуки на сохранение модели.

x3al ★★★★★
()

В крайнем случае можешь сделать вьюху, которая будет обрабатывать все адреса, потом ломиться в базу за данными ну и обрабатывать соответствующе. По-моему ты спроектировал что-то не так.

Winnerer
()
Ответ на: комментарий от Winnerer

Можно и притвориться, что твой модуль умеет в магию. В конце концов, внутри джанги её полно.

Модуль — объект, у него есть init. В init можно писать любой трэш, в том числе определять любые функции. Любой class-based view — тоже объект (не class-based — объект, но не настолько интересный), если есть причины не делать это на уровне модуля. urlpatterns — обычный list, следовательно, объект, хорошо притворяющийся list'ом, тоже сойдёт. Понятно, что всё это может сколько угодно смотреть в базу, другую базу, memcached, внешние файлы, датчик погоды на Марсе и астрологический прогноз на день, на основании всего этого определяя urlpattern и формируя вид к нему (в простейшем случае можно динамически влепить туда лямбду). Ну и urlpatterns можно банально дописать в любое время, если лень делать объект, притворяющийся им.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)

Все оказалось как-то неприлично просто: Создал в urls.py регулярное выражение принимающее id записи из бд, которое в свою очередь рисуется в шаблоне. По этому id вывожу новую страницу меню. А новые страницы создал так: После добавления нового пункта меню(записи в бд), вызываю функцию которая в соответствии с этой записью создает новый *.html файл.

djfire
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.