Форум сайта python.su
Здраствуйте, все!
После сдачи проекта отгреб проблемку.
Небольшой портальчик, несколько разных блоков и лента новостей.
Все работает замечательно, но бывает что после добавления, например, новости (модель ниже),
она не отображается на странице длительное время, вплоть до рестарта/релоада апача
model.py:
class News(models.Model):
title = models.CharField("Заголовок", maxlength=250)
category = models.ForeignKey(NewsCategories, verbose_name="Категория")
preview = models.TextField("Сокращенный вариант")
body = models.TextField("Полный текст")
created = models.DateTimeField("Добавлена", auto_now_add=True)
hot = models.BooleanField("Горячая новость")
context = {
'hot_news': News.objects.filter(hot=True).order_by('-created')[0],
}
return render_to_response('index.html', context)
context["news_list"] = News.objects.filter(hot=False).order_by('-created')[:5]
Офлайн
Controlling cache: Using other headers
Django documentationдругими словами у вас кешуриется именно клиентский код (не установленны необходимые <meta /> теги), а не серверный
If you want to use headers to disable caching altogether, django.views.decorators.cache.never_cache is a view decorator that adds headers to ensure the response won’t be cached by browsers or other caches. Example:from django.views.decorators.cache import never_cache @never_cache def myview(request): ...
Офлайн
в шаблоне присутствуют теги:
<meta http-equiv=“Pragma” content=“no-cache” />
<meta http-equiv=“cache-control” content=“no-store, no-cache, must-revalidate” />
Офлайн
я так понял, все проблема в том, что я определил словарь context глобально… не хотелось множить один и тот же код для каждой вьюхи
а при использовании mod_python глобальные переменные вычисляются один раз при запуске
подскажите, пожалуйста, как правильно сделать?
вот пример из views.py:
context = {
'hot_news': News.objects.filter(hot=True).order_by('-created')[0],
'last_radio_message': VisualRadio.objects.all().order_by('-created')[0],
'last_totals': Totals.objects.all().order_by('-created')[0],
'last_poll': Poll.objects.all().order_by('-created')[0],
}
def index(request):
context["hot_news"] = News.objects.filter(hot=True).order_by('-created')[0]
context["news_list"] = News.objects.filter(hot=False).order_by('-created')[:5]
return render_to_response('index.html', context)
def news(request, news_id):
context["news"] = get_object_or_404(News, id=news_id)
return render_to_response('news.html', context)
Офлайн
context_processors не помогут отцу русской демократии?
Subclassing Context: RequestContext
Django documentationв Вашем случае это может выглядеть как:
The second difference is that it automatically populates the context with a few variables, according to your TEMPLATE_CONTEXT_PROCESSORS setting.
def something(request): return { 'last_radio_message': VisualRadio.objects.all().order_by('-created')[0], 'last_totals': Totals.objects.all().order_by('-created')[0], 'last_poll': Poll.objects.all().order_by('-created')[0], }
def index(request): return render_to_response('index.html', { 'hot_news': News.objects.filter(hot=True).order_by('-created')[0], 'news_list': News.objects.filter(hot=False).order_by('-created')[:5], }, context_instance=RequestContext(request)) def news(request, news_id): news = get_object_or_404(News, id=news_id) return render_to_response('news.html', { 'news': news, }, context_instance=RequestContext(request))
Офлайн
Спасибо всем! Я написал свои теги для каждого блока, это решило проблему :)
Офлайн