Форум сайта python.su
8
{% load category %}{% category request %}
Офлайн
2
adw0rdтак уже пробовал… ругается
так нельзя?
'category' received too many positional arguments
Офлайн
8
Потомучто вы не принимаете аргументов, сделайте так:
@register.inclusion_tag('blog/category.html') def category(request): category = Category.objects.all().order_by('id') return {'category':category}
Офлайн
8
Почитал про 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)
Офлайн
2
Так тоже пробовал. Страница рендерится нормально, но request как контекст не передаёт
Офлайн
8
Вообщем у вас должно получится что-то типа:
@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}
Офлайн
2
Что то не выходит((( Получаю KeyError и Error during template rendering
Офлайн
8
Ну давайте теперь учится отладке, для начала поставьте себе 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}
Отредактировано adw0rd (Авг. 26, 2012 16:51:39)
Офлайн
2
debug_toolbar поставил сразу же после 1 Вашего упоминания о нём (request не передаётся в шаблон)
Для разработки я использую PyCharm и если в коде я не использую какие либо импорты, это видно.
строчка
request = context['request']
from django.core.context_processors import request
Офлайн
8
Тогда покажите текущий вид (как я понимаю вы воспользовались советами в предыдущих постах) вашей вьюхи?
Либо просто дайте мне исходный код вашего проекта, я сам пофикшу, а то мы так больше времени потратим
Офлайн