Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 25, 2012 17:24:14

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

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

Ув. сообщество, только начинаю разбираться с Django, пробую создать так сказать “my first app” и столкнулся с проблемой:
Нужно передать текущий url в шаблон. Поиски приводят к одному и тому же -

{{ request.path }}
Но в шаблоне у меня выводится пустое значение. Читал, что нужно как-то подключать request в шаблон, но как именно так и не нашёл. Постараюсь более точно описать проблему:
settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.request',
    'django.contrib.messages.context_processors.messages',
   )
views.py:
from blog.models import Category
from django.shortcuts import render_to_response
def navigation(request):
    category = Category.objects.all().order_by('id')
    return render_to_response('blog/category.html', {'category':category})

category.html
<ul class="nav">
    {% for category in category %}
        <li class="nav_item {%  if category.slug in request.path %}active{% endif %}"><a href="/{{ category.slug }}">{{ category.name }}</a></li>
    {% endfor %}
</ul>

Основная задача - добавить класс к активной ссылке на странице. Ещё я пробовал выводить request.path|length выводит 0, то есть, я так понимаю это вообще получается пустая строка. Так же в некоторых туриалах советовали делать свой контекстный фильтр, делал по инструкциям, добавлял в TEMPLATE_CONTEXT_PROCESSORS и всё равно результата 0. Если что не так написал, извините, только начинаю во всём разбираться…
Ах, да… Самое главное))) Хелп, плз.. направьте на путь истинный

Офлайн

#2 Авг. 25, 2012 18:07:21

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

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

Офлайн

#3 Авг. 25, 2012 23:50:40

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

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

reclosedev
context_instance=RequestContext(request)
И так делал тоже(((
from django.template import RequestContext
....
return render_to_response('blog/category.html', {'category':category}, context_instance=RequestContext(request))

шаблон не выводит ничего, ни request.path, ни HttpRequest.path
Блин, ну где я косячу?

Отредактировано hulygun (Авг. 25, 2012 23:56:07)

Офлайн

#4 Авг. 25, 2012 23:59:53

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

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

Попробуй напрямую указать:

return render_to_response('blog/category.html', {'category':category, 'request': request}, context_instance=RequestContext(request))



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#5 Авг. 26, 2012 00:26:29

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

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

barabansheg
Попробуй напрямую указать:
Всё равно пустой результат. Может я что-то изначально не так делаю? Но request ни в какую в шаблон не передаётся

Офлайн

#6 Авг. 26, 2012 11:29:48

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

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

Используйте direct_to_template вместо render_to_response. Подключается вот так:

from django.views.generic.simple import direct_to_template
def foo(request):
    return direct_to_template(request, 'index.html')

Отредактировано newca9h (Авг. 26, 2012 11:35:34)

Офлайн

#7 Авг. 26, 2012 13:35:39

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

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

У вас установлен debug_toolbar? Просто по нему сразу можно понять передаете вы что-то в шаблон, или нет, см. аттач




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

Прикреплённый файлы:
attachment request_in_debug_toolbar.png (49,8 KБ)

Офлайн

#8 Авг. 26, 2012 14:24:15

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

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

Блин… нашёл косяк))) Извиняюсь, что по незнанию спрашивал совершенно не то…
Всё работает, если указывать напрямую

{'category':category, 'request': request}
Косяк был в том, что моя вьюха не работала, потому что я подключал модель Category через шаблонный тег
@register.inclusion_tag('blog/category.html')
def category():
    category = Category.objects.all().order_by('id')
    return {'category':category}
Возникает следующий вопрос: как правильно подключить request в этот шаблонный тег?

Офлайн

#9 Авг. 26, 2012 15:12:16

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

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

А что вы потом хотите сделать с этим “тегом”?




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

Офлайн

#10 Авг. 26, 2012 15:29:23

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

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

в созданном мною приложении есть пакет templatetags с пустым __init__.py и category.py, где собственно и прописан этот тег. В шаблон я его подключаю через {% load category %}{% category %} Категории нормально выводятся но контекст request в шаблон тега не передаётся

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version