Уведомления

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

#1 Янв. 26, 2013 07:00:58

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

Хотим мы, допустим, вывести список комментариев для модерации и чтобы была там ссылка “удалить” и “одобрить”. Предположим, ссылки получаем функциями get_delete_url и get_approve_url.

def comments_moderation(request):
    comments = CommentWithTitle.objects.filter(is_public=False)
    for comment in comments:
        del_url = get_delete_url(comment)
        print del_url
    return render_to_response('newcomments.html', {'comments': comments}, context_instance=RequestContext(request))
Как правильнее получить их в шаблоне? В представлении через цикл поместить в контекст, или сделать собственный шаблонный тег?

Офлайн

#2 Янв. 26, 2013 22:09:32

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

Я думаю лучше сделать функции get_*_url методами модели



Офлайн

#3 Янв. 27, 2013 09:46:56

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

Что правильнее, передача информации через контекст, или написание шаблонного тега?

Правильнее IMHO заюзать CBV и написать миксин ModeratorMixin, помещая который в перечень классов-родителей будем получать определенный функционал.



Офлайн

#4 Фев. 5, 2013 05:59:45

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

svas
Я думаю лучше сделать функции get_*_url методами модели
Не совсем понимаю, что делать с тем, что вернёт метод.
Вот получили мы не опубликованные комментарии:
comments = CommentWithTitle.objects.filter(is_public=False)
и куда пихать ссылки?

FishHook
Правильнее IMHO заюзать CBV и написать миксин ModeratorMixin, помещая который в перечень классов-родителей будем получать определенный функционал.
Попробую так.

Офлайн

#5 Фев. 5, 2013 08:05:35

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

Написал пока так:
view.py

def delete_comment(request, comment_id):
    comment = CommentWithTitle.objects.get(id = comment_id)
    return HttpResponseRedirect(get_delete_url(comment))

urls.py
url(r'delete_comment/(?P<comment_id>\d+)/$', delete_comment, name='delete_comment'),

шаблон
<a href={% url delete_comment comment.pk %}>Удалить комментарий</a>

Работает, но кажется каким-то не шибко изящным вариантом. Или нормально? Сейчас ещё попробую с CBV сделать, посмотрю, как красивее.

Офлайн

#6 Фев. 5, 2013 11:59:09

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

Вот получили мы не опубликованные комментарии:
comments = CommentWithTitle.objects.filter(is_public=False)

В модели CommentWithTitle есть:

@models.permalink
def get_delete_url(self):
    return ('delete_comment', (), {
        	'comment_id': self.pk,
        	})

В template:

{% for comment in comments %}
{{comment }}
<a href="{{ comment.get_delete_url  }}">Удалить комментарий</a>
{% endfor %}

Отредактировано inoks (Фев. 5, 2013 11:59:41)

Офлайн

#7 Март 3, 2013 06:54:56

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

inoks, спасибо, вариант хороший.
В итоге получается, что по ссылке с адресом

{{ comment.get_delete_url  }}
мы идём на представление, которое перенаправляет нас на представление:
return urlresolvers.reverse("django.contrib.comments.views.moderation.delete",
                                    args=(comment.id,))

Поэтому подумалось, почему бы get_delete_url не заставить возвращать сразу адрес на это представление:
@models.permalink
    def delete_comment_url(self):
        return 'comments-delete', (), {'comment_id': self.pk}
Где ‘comments-delete’ это имя шаблона url из приложения comments, ведущего на нужное представление “django.contrib.comments.views.moderation.delete”. Это же должно работать? Почему-то в шаблоне
{{ comment.delete_comment_url }}
ничего не выводит. При этом если имя шаблона сменить на ‘delete_comment’, то всё работает. Что не так может быть?

Офлайн

#8 Март 3, 2013 14:15:04

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

Что правильнее, передача информации через контекст, или написание шаблонного тега?

ИМХО удалять информацию по ГЕТу это очень плохая практика.



Офлайн

#9 Март 3, 2013 15:51:42

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

FishHook
ИМХО удалять информацию по ГЕТу это очень плохая практика.
Насколько помню, это представление запрашивает подтверждение удаления, которое отправляется уже кнопкой, ПОСТом.

Офлайн

#10 Март 20, 2013 16:49:14

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Что правильнее, передача информации через контекст, или написание шаблонного тега?

S
Как правильнее получить их в шаблоне?
В 1.5 сам инстанс вьюхи попадает в контекст
Передавайте в контекст сам self вьюхи
У него вызывайте функции проперти и т. д.



Офлайн

  • Начало
  • » Django
  • » Что правильнее, передача информации через контекст, или написание шаблонного тега?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version