Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 18, 2009 10:29:43

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Как написать свой context processor?

Доброго врени суток!

Хотел написать свой контекстный процессор.
файл 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}}
И ничего не выводит.
Как правильно написать свой контексный процессор?

Отредактировано (Дек. 18, 2009 10:30:31)

Офлайн

#2 Дек. 18, 2009 12:30:32

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Как написать свой context processor?

видать RequestContext не передаёшь во вьюшке или не срабатывает условие if hasattr(request, ‘vas’)

Офлайн

#3 Дек. 18, 2009 13:35:20

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Как написать свой context processor?

Написал вот так и заработало:

 return render_to_response(template, {'menu_types': menu_types, },  context_instance=RequestContext(request))
это что, нужно в каждой вьюхе такое прописывать?

Офлайн

#4 Дек. 18, 2009 13:43:39

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать свой context processor?

ну, нужно просто в каждой вьюхе прописывать то, что ты берешь не обычный контекст, а RequestContext.



Офлайн

#5 Дек. 18, 2009 19:50:43

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Как написать свой context processor?

helm2004
напиши декоратор или возьми render_to

Офлайн

#6 Дек. 18, 2009 21:06:16

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать свой context processor?

Тоже не могу разобраться, есть процессор который находиться в корне проекта-
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}))



Отредактировано (Дек. 18, 2009 21:07:34)

Офлайн

#7 Дек. 19, 2009 02:12:06

tezro
От:
Зарегистрирован: 2009-12-09
Сообщения: 90
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать свой context processor?

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/
Вот это смотрели?



Офлайн

#8 Дек. 19, 2009 12:16:56

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать свой context processor?

tezro
Спасибо разобрался!



Офлайн

#9 Дек. 19, 2009 18:52:58

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как написать свой context processor?

Malinaizer
Один вопрос - один тред. А то потом не треды, а мешанина из вопросов и ответов.

Офлайн

#10 Дек. 19, 2009 20:40:49

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Как написать свой context processor?

Значит так, взял декоратор и как ни странно заработало! Спасибо всем!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version