Форум сайта python.su
Здравствуйте, я новичок в django. Вопрос такой: существуют ли стандартные способы динамического добавления функций в views и адресов в urls приложения, используя поля бд.
Уточнение: допустим есть функции написаные мной в views. Добавилось новое поле в бд, и по какому-нибудь событию, присходит автоматическое добавление кода новой функции в views. Тоже касается и urls - которые будут указывать на новую функцию. То есть в целом, по новому полю происходит автоматическое программирование новой страницы.
Спасибо за помощь.
Офлайн
fireamper
думаю такого в джанги такой фишки нет, но это питон возьми да и сгенерируй что тебе надо.
Хотя если поведаешь нам что у тебя за проблема, может что и конкретное посоветуют
Отредактировано Singularity (Ноя. 6, 2013 23:36:55)
Офлайн
Пока что это на стадии идеи, а идея такова:
В админке добавляется новая запись в таблицу, например это записи пунктов меню. После добавления этой записи по какому-нибудь событию все создается - добавляется адрес в urls.py и функция представления в views.py. То есть добавил запсиь в бд - получил новый, уже рабочий пункт меню.
На счет генерации питоном это понятно(в смысле не знаю как реализовать, но понимаю что питоном обработать файлы view.py и urls.py и подобавлять строки в код).
Офлайн
fireamper
так поля или записи ?
Офлайн
новая запись в существующую таблицу
Офлайн
На подакшене такое не прокатит... uwsgi сервер всё равно релоадить придётся Что Вам мешает написать регулярку в урл? models.py:
class MyMenuItem(models.Model):
title = models.CharField(max_lenght=100)
def get_url(self):
return reverse('myview', args=[self.pk])
urls.py:
...
url(r'^menu_path/(?P<pk>\d+)/$', MenuView.as_view(), name='myview'),
...
ну соответственно views.py:
class MenuView(TemplateView):
...
def get_context_data(self, **kwargs):
context = super(MenuView, self).get_context_data(**kwargs)
...
context['current_menu_item'] = MyMenuItem.objects.get(pk=self.kwargs['pk'])
...
return context
Отредактировано hulygun (Ноя. 7, 2013 06:21:33)
Офлайн
Спасибо за верное направление! Я какую-то бяку стал придумывать. Решение проще некуда оказалось. Но в Вашем коде я не до конца разобрался, объясните: функция get_url что возвращает? urlf адрес? И зачем использовали класс TemplateView?
Офлайн
да, get_url() возвращает ссылку на соответствующую страницу по поводу TemplateView, то можете использовать любой подходящий для Вашей задачи Документация по Class-based views тут
Офлайн