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

Хотя если поведаешь нам что у тебя за проблема, может что и конкретное посоветуют
fireamper
Пока что это на стадии идеи, а идея такова:
В админке добавляется новая запись в таблицу, например это записи пунктов меню. После добавления этой записи по какому-нибудь событию все создается - добавляется адрес в urls.py и функция представления в views.py. То есть добавил запсиь в бд - получил новый, уже рабочий пункт меню.
На счет генерации питоном это понятно(в смысле не знаю как реализовать, но понимаю что питоном обработать файлы view.py и urls.py и подобавлять строки в код).
Singularity
fireamper
так поля или записи ?
fireamper
новая запись в существующую таблицу
hulygun

На подакшене такое не прокатит... 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
fireamper
Спасибо за верное направление! Я какую-то бяку стал придумывать. Решение проще некуда оказалось. Но в Вашем коде я не до конца разобрался, объясните: функция get_url что возвращает? urlf адрес? И зачем использовали класс TemplateView?
hulygun

да, get_url() возвращает ссылку на соответствующую страницу по поводу TemplateView, то можете использовать любой подходящий для Вашей задачи Документация по Class-based views тут

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB