Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 26, 2012 16:06:26

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Как передать request в шаблон

{% load category %}{% category request %}
так нельзя?




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

#2 Авг. 26, 2012 16:12:38

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Как передать request в шаблон

adw0rd
так нельзя?
так уже пробовал… ругается
'category' received too many positional arguments

Офлайн

#3 Авг. 26, 2012 16:14:35

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Как передать request в шаблон

Потомучто вы не принимаете аргументов, сделайте так:

@register.inclusion_tag('blog/category.html')
def category(request):
    category = Category.objects.all().order_by('id')
    return {'category':category}




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

#4 Авг. 26, 2012 16:18:22

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Как передать request в шаблон

Почитал про inclusion_tag, теперь и вы почитайте https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags

Там есть пункт про “takes_context”, пример:

# The first argument *must* be called "context" here.
def jump_link(context):
    return {
        'link': context['home_link'],
        'title': context['home_title'],
    }
# Register the custom tag as an inclusion tag with takes_context=True.
register.inclusion_tag('link.html', takes_context=True)(jump_link)




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

#5 Авг. 26, 2012 16:19:16

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Как передать request в шаблон

Так тоже пробовал. Страница рендерится нормально, но request как контекст не передаёт

Офлайн

#6 Авг. 26, 2012 16:19:21

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Как передать request в шаблон

Вообщем у вас должно получится что-то типа:

@register.inclusion_tag('blog/category.html', takes_context=True)
def category(context):
    request = context['request']
    category = Category.objects.all().order_by('id')
    return {'category':category}




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

#7 Авг. 26, 2012 16:42:17

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Как передать request в шаблон

Что то не выходит((( Получаю KeyError и Error during template rendering

Офлайн

#8 Авг. 26, 2012 16:50:35

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Как передать request в шаблон

Ну давайте теперь учится отладке, для начала поставьте себе debug_toolbar и мы убедимся что у вас вообще есть в контексе “request”.

Еще крайне советую попробовать http://adw0rd.com/2012/python-django-pudb/
Тогда сможем посмотреть что передается в “context” на этапе выполнения

@register.inclusion_tag('blog/category.html', takes_context=True)
def category(context):
    import pudb; pudb.set_trace()
    request = context['request']
    category = Category.objects.all().order_by('id')
    return {'category':category}




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Отредактировано adw0rd (Авг. 26, 2012 16:51:39)

Офлайн

#9 Авг. 26, 2012 17:33:55

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Как передать request в шаблон

debug_toolbar поставил сразу же после 1 Вашего упоминания о нём (request не передаётся в шаблон)
Для разработки я использую PyCharm и если в коде я не использую какие либо импорты, это видно.
строчка

request = context['request']
никак не использует
from  django.core.context_processors import request

Офлайн

#10 Авг. 26, 2012 19:14:33

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Как передать request в шаблон

Тогда покажите текущий вид (как я понимаю вы воспользовались советами в предыдущих постах) вашей вьюхи?

Либо просто дайте мне исходный код вашего проекта, я сам пофикшу, а то мы так больше времени потратим




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version