Найти - Пользователи
Полная версия: Как написать свой context processor?
Начало » Django » Как написать свой context processor?
1
helm2004
Доброго врени суток!

Хотел написать свой контекстный процессор.
файл context_processors.py(коморый находиться в папке core1 моего проэкта):
# -*- coding: utf-8 -*-
from django.core.context_processors import request
from django.template import RequestContext
from django.shortcuts import render_to_response
def vas(request):
prosto = "sdfsdf"
if hasattr(request, 'vas'):
return {'vas':prosto,}
далее подключаю его в settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
#стандартные
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.request',
'multilingual.context_processors.multilingual',
#свои
'core1.context_processors.vas',
)
А в шаблоне вывожу:
{{vas}}
И ничего не выводит.
Как правильно написать свой контексный процессор?
slav0nic
видать RequestContext не передаёшь во вьюшке или не срабатывает условие if hasattr(request, ‘vas’)
helm2004
Написал вот так и заработало:
 return render_to_response(template, {'menu_types': menu_types, },  context_instance=RequestContext(request))
это что, нужно в каждой вьюхе такое прописывать?
vaxXxa
ну, нужно просто в каждой вьюхе прописывать то, что ты берешь не обычный контекст, а RequestContext.
slav0nic
helm2004
напиши декоратор или возьми render_to
Malinaizer
Тоже не могу разобраться, есть процессор который находиться в корне проекта-
my_context_processors.py
def Comment_processors(request):
return {
'news': news,
'form': form,
'comment_count': comment_count,
'comments': comments}

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'my_context_processors.Comment_processors'
вот представление
@login_required
def news_detail(request, news_id):
news = News.objects.get(pk=news_id)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = Comment(
news=news,
username = request.user.username,
text = form.cleaned_data['text'])
comment.save()
return HttpResponseRedirect(
reverse('news.news_detail', kwargs={'news_id':news_id}))
else:
form = CommentForm()
comments = Comment.objects.filter(news=news)
comment_count = comments.count()

return render_to_response('news/news_detail.html',
context_instance=RequestContext(request))
почему не работает процессор вылазит исключение global name ‘news’ is not defined?


Вот так работает-
return render_to_response('news/news_detail.html',
RequestContext(request, {
'news':news,
'form':form,
'comment_count':comment_count,
'comments':comments}))
tezro
Malinaizer
Тоже не могу разобраться, есть процессор который находиться в корне проекта-
my_context_processors.py
def Comment_processors(request):
return {
'news': news,
'form': form,
'comment_count': comment_count,
'comments': comments}

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'my_context_processors.Comment_processors'
вот представление
@login_required
def news_detail(request, news_id):
news = News.objects.get(pk=news_id)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = Comment(
news=news,
username = request.user.username,
text = form.cleaned_data['text'])
comment.save()
return HttpResponseRedirect(
reverse('news.news_detail', kwargs={'news_id':news_id}))
else:
form = CommentForm()
comments = Comment.objects.filter(news=news)
comment_count = comments.count()

return render_to_response('news/news_detail.html',
context_instance=RequestContext(request))
почему не работает процессор вылазит исключение global name ‘news’ is not defined?


Вот так работает-
return render_to_response('news/news_detail.html',
RequestContext(request, {
'news':news,
'form':form,
'comment_count':comment_count,
'comments':comments}))
http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/
Вот это смотрели?
Malinaizer
tezro
Спасибо разобрался!
Ferroman
Malinaizer
Один вопрос - один тред. А то потом не треды, а мешанина из вопросов и ответов.
helm2004
Значит так, взял декоратор и как ни странно заработало! Спасибо всем!
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