Джанго, кажется, кеширует? - PullRequest
1 голос
/ 13 июля 2011

Я использую Django 1.2.1 для моего личного сайта с блогом. Это все хорошо, но я обнаружил, что все браузеры, которые я пробовал (Firefox, Chromium, Opera), кешируют веб-страницы, что, конечно, является проблемой для других пользователей, просматривающих мой блог (так как он не загружается) новые сообщения, если они не очищают свой кэш или не обновляют страницу). У меня не было этой проблемы, когда мой сайт работал на PHP, так как мне решить эту, казалось бы, проблему, связанную с Django?

Я работаю с Джанго всего около недели или около того, так что я не знаю, где примерно я должен искать, чтобы исправить что-то подобное. Заранее спасибо!

То, как я делаю каждую страницу (и каждое сообщение в блоге), - соответственно объект Page / Post, поэтому я могу использовать интерфейс администратора без необходимости писать свой собственный. Хотя проблема возникает в обеих ситуациях, я просто покажу класс Post:

class Post(models.Model):
    author = models.ForeignKey(User, default=User.objects.get(username='nathan'))
    status = models.ForeignKey(Status, default=Status.objects.get(text='Draft'))
    date = models.DateTimeField(default=datetime.datetime.now())
    title = models.CharField(max_length=100)
    post = models.TextField()
    categories = models.ManyToManyField(Category)

    def __unicode__(self):
        return u'%s' % self.title

    def link(self):
        return u'/blog/post/%s' % self.title

    class Meta:
        ordering = ['-date']

А вот и мой urls.py:

from django.conf.urls.defaults import *                                                                       
from django.views.generic import list_detail

from feeds import PostFeed

from models import Post

blog_posts = { 
    'queryset': Post.objects.filter(status__text__exact='Published'),
}

urlpatterns = patterns('getoffmalawn.blog.views',
    (r'^$', list_detail.object_list, blog_posts),
    (r'^archive/(\d{4})$', 'archive'),
    (r'^rss/$', PostFeed()),
    (r'^search/$', 'search'),
    (r'^tag/(.+)/$', 'tag'),
    (r'^post/(.+)/$', 'post'),
)

Если вы, ребята, хотели бы увидеть код из views.py, просто спросите, и я его тоже скину.

Редактировать:

Вот взгляды.

view.py для блога Приложение:

from django.http import HttpResponse, HttpResponseRedirect                                                                              
from django.shortcuts import render_to_response, redirect
from django.core.context_processors import csrf
from django.db.models import Q

from models import Post, Category

def post(request, title):
    post = Post.objects.get(title=title)
    c = locals()
    c.update(csrf(request))
    return render_to_response('blog/post_detail.html', c)

def blog_detail(request, blog_id):
    post = get_object_or_404(Post, pk=blog_id)

    return list_detail.object_detail(request, queryset=Post.objects.all(), object_id=blog_id)

def archive(request, month, year):
    pass

def search(request):
    if request.method == 'GET':
        query = request.GET['q']

        object_list = Post.objects.filter(Q(post__icontains=query) | Q(title__icontains=query), status__text__exact='Published')

        return render_to_response('blog/post_list_sparse.html', locals())

def tag(request, tag):
    object_list = Post.objects.filter(categories__text__exact=tag, status__text__exact='Published')
    return render_to_response('blog/post_list.html', locals())

Ответы [ 2 ]

1 голос
/ 17 июля 2011

Проблема заключалась в том, что на самом деле было кэшированием на основе браузера, как мне сказал участник в списке рассылки пользователей Django.Причина, по которой я не видел эту проблему в PHP, заключается в том, что он отправлял заголовки подавления кэша.

Решением было добавить @never_cache decorator в соответствующие представления.

0 голосов
/ 13 июля 2011

Вот документация для кеширования в django.

https://docs.djangoproject.com/en/1.2/topics/cache/

Не идеально, но вы можете заставить все страницы указывать браузерам ничего не кэшировать, чтобы посмотреть, поможет ли это.

https://docs.djangoproject.com/en/1.2/topics/cache/#controlling-cache-using-other-headers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...