Django似乎在缓存?

时间:2011-07-13 12:31:41

标签: python django

我正在通过博客为我的个人网站运行Django 1.2.1。这一切都很好,但是我发现我尝试过的所有浏览器(Firefox,Chromium,Opera)都在缓存网页,这对于查看我的博客的其他用户来说当然是一个问题(因为它不会加载新帖子,除非他们清空缓存或强制刷新页面)。当我的网站运行PHP时,我没有遇到这个问题,那么我将如何解决看似与Django相关的问题呢?

我只和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 for blog App:

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 个答案:

答案 0 :(得分:1)

问题在于它真的是基于浏览器的缓存,正如Django-users邮件列表中的成员告诉我的那样。我在PHP中没有看到这个问题的原因是它正在发送缓存抑制头。

解决方案是将@never_cache decorator添加到相关视图中。

答案 1 :(得分:0)

以下是django中缓存的文档。

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

不理想,但您可以让所有页面告诉浏览器不要缓存任何内容,看看是否有帮助。

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