Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации? [RSS Feed]

#1 Июнь 10, 2012 13:19:55

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

Здравствуйте. Нужно выводить из БД на страничку список телеканалов с их статусом. Сделал так:
в шаблон передаю словарь такого вида: data{id:info{}}. То есть словарь со словарями. В первом словаре ключ - это id в БД, в словаре, который доступен по этому ключу - вся информация о канале. Конкретный пример:

data{1:{'name':'channelname', 'state':True}}
ну и…так далее.

В шаблоне творится АД:

{% for id,info in data.items %}
        {% if info.state %}
        <tr bgcolor="#9dde8c">
                {% else %}
                <tr bgcolor="#f89090">
        {% endif %}
                ...тут ничего интересного: из info по ключу достаём данные и заполняем таблицу...
{% endfor %}

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

Собственно, данные из базы я забираю ещё более диким образом, наверное я просто не умею работать с базой, но…

Вот модель:
class Channels(models.Model):
    name = models.CharField(max_length=100)
    group_name = models.CharField(max_length=100)
    ip = models.TextField(max_length=16)
    port = models.IntegerField(max_length=5)
    screenpath = models.CharField(max_length=900)
    state = models.BooleanField()
    def __unicode__(self):
        return '%s %s %s %s %s %s %s' % (self.id, self.name, self.group_name, self.ip, self.port, self.screenpath, self.state)

Вот функция из viev.py:

def index(request):
    data = {}
    for i in ch.objects.all().order_by('id'):
        info = {}
        raw_data = str(i).split(' ')
        dbid = raw_data[0]
        info['id'] = dbid
        info['name'] = raw_data[1]
        info['group_name'] = raw_data[2]
        info['ip'] = raw_data[3]
        info['port'] = raw_data[4]
        info['screenpath'] = raw_data[5]
        if raw_data[6] == 'True':
            info['state'] = True
        else:
            info['state'] = False
        data[dbid] = info
    t = get_template('index.html')
    html = t.render(Context({'data': data}))
    return HttpResponse(html)


Ещё раз формулирую конкретные вопросы:

Как правильно отдавать шаблону всю кучу данных из базы?
Как работать со словарём в шаблоне? В частности: как отсортировать его по ключу? Или как обойтись без словаря?



Отредактировано UsCr (Июнь 10, 2012 13:32:43)

Офлайн

#2 Июнь 10, 2012 20:24:32

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

1. Забудьте про логику в шаблонах.
2. Почитайте про кастомные теги/фильтры.
3. Если не понравилось, думайте, как обходиться вьюхами, и передавать более простой вариант в шаблон.
4. Почитайте документацию, можно довольно бегло.



Офлайн

#3 Июнь 11, 2012 14:48:58

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

fata1ex
Спасибо за отклик. А насчет запросов в базу? Так это и должно выглядеть?



Офлайн

#4 Июнь 11, 2012 15:58:48

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

Разумеется, нет. Чтобы это понять, достаточно прочитать хотя бы официальный туториал.



Офлайн

#5 Июнь 11, 2012 20:47:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

В очередной раз пропагандирую за отказ от функций-представлений, разумнее удобней и проще юзать классы.
Class Based Views в Джанге - это сила и красота питонячьего кода, у Вас пропадет желание строить велосипеды, я гарантирую это.



Офлайн

#6 Июнь 11, 2012 21:02:34

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

FishHook
В очередной раз пропагандирую за отказ от функций-представлений, разумнее удобней и проще юзать классы.
Class Based Views в Джанге - это сила и красота питонячьего кода, у Вас пропадет желание строить велосипеды, я гарантирую это.
а не могли бы предоставить пример просто представления, и его замены через то что вы пропагандируете.
или если уже написано, ткните ссылочкой
заранее спасибо

Офлайн

#7 Июнь 11, 2012 21:12:48

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

FishHook, не так давно было несколько постов в разных блогах о “за и против” CBV. Есть как плюсы решения, так и минусы, не надо быть столь категоричным :)
Например.

PS. ilnur, неужели сложно набрать в поисковике ‘class based view’, о которых говорилось выше?



Отредактировано fata1ex (Июнь 11, 2012 21:14:32)

Офлайн

#8 Июнь 11, 2012 21:27:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

fata1ex
FishHook, не так давно было несколько постов в разных блогах о “за и против” CBV. Есть как плюсы решения, так и минусы, не надо быть столь категоричным
Например.

PS. ilnur, неужели сложно набрать в поисковике ‘class based view’, о которых говорилось выше?
>>>Есть как плюсы решения, так и минусы, не надо быть столь категоричным
А давайте обойдемся без ссылок на непонятные ресурсы, мы видим кусок кода и видим, что автор намекает на то, что СБВ может вылиться в бОльшее количество ненужного кода. Мы не знаем, какой величины проект пилит автор и какие у него цели вообще. Возникает вопрос к автору, знаком ли он с концепциями ООП?
Если хотите обсудить, расскажите о Вашем личном опыте работы с СБВ и классическими представлениями.



Отредактировано FishHook (Июнь 11, 2012 21:44:59)

Офлайн

#9 Июнь 11, 2012 21:54:36

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

FishHook, опыт у меня небольшой, а вот автору непонятного ресурса я верю, так как периодически вижу его сообщения в django-dev рассылке. Думается мне, он разбирается в концепциях ООП куда лучше нас с вами. Ну и как бы.

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



Отредактировано fata1ex (Июнь 11, 2012 22:04:02)

Офлайн

#10 Июнь 11, 2012 22:26:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?

fata1ex
FishHook, опыт у меня небольшой, а вот автору непонятного ресурса я верю, так как периодически вижу его сообщения в django-dev рассылке. Думается мне, он разбирается в концепциях ООП куда лучше нас с вами. Ну и как бы.

А вообще, не стоит воспринимать так всё в штыки. Я лишь предложил пищу для размышлений. Вот ещё чуть-чуть.
Коллега, какие штыки, о чем Вы?
Я высказываю своё ИМХО,
оно выражается в том, что лично для меня ( а основной мой фреймворк в работе это Django) CBV - это инструмент, который существенно облегчает работу. Абстрагируясь от стартового топика, где топистартер пишет явно какую-то ерунду, в моей практике заведено описывать базовые классы для разных сущностей, а во вьюхах, моделях и формах их наследовать. Я думаю, что это правильно и хорошо.
Мне кажется, конструктивным разговор, в котором есть место прениям. Вы, судя по Вашим постам, хороший специалист. Я хочу быть хорошим специалистом. Давайте обмениваться личным опытом, это хотя бы оживит форум.



Отредактировано FishHook (Июнь 11, 2012 22:28:24)

Офлайн

  • Начало
  • » Django
  • » Django: несколько вопрос неосилятора. Как работать со словарём или как избавится от словаря? Как правильно отдать в шаблон кучу информации?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version