Найти - Пользователи
Полная версия: Как передать request в шаблон
Начало » Django » Как передать request в шаблон
1 2 3
hulygun
Ув. сообщество, только начинаю разбираться с 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. Если что не так написал, извините, только начинаю во всём разбираться…
Ах, да… Самое главное))) Хелп, плз.. направьте на путь истинный
reclosedev
https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#id2
context_instance=RequestContext(request)
hulygun
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
Блин, ну где я косячу?
barabansheg
Попробуй напрямую указать:
return render_to_response('blog/category.html', {'category':category, 'request': request}, context_instance=RequestContext(request))
hulygun
barabansheg
Попробуй напрямую указать:
Всё равно пустой результат. Может я что-то изначально не так делаю? Но request ни в какую в шаблон не передаётся
newca9h
Используйте 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')
adw0rd

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

hulygun
Блин… нашёл косяк))) Извиняюсь, что по незнанию спрашивал совершенно не то…
Всё работает, если указывать напрямую
{'category':category, 'request': request}
Косяк был в том, что моя вьюха не работала, потому что я подключал модель Category через шаблонный тег
@register.inclusion_tag('blog/category.html')
def category():
    category = Category.objects.all().order_by('id')
    return {'category':category}
Возникает следующий вопрос: как правильно подключить request в этот шаблонный тег?
adw0rd
А что вы потом хотите сделать с этим “тегом”?
hulygun
в созданном мною приложении есть пакет templatetags с пустым __init__.py и category.py, где собственно и прописан этот тег. В шаблон я его подключаю через {% load category %}{% category %} Категории нормально выводятся но контекст request в шаблон тега не передаётся
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB