我正在通过博客为我的个人网站运行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())
答案 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