Django Site多站点

May 12, 2015


本文主要介绍Django多站点的使用和一些注意事项


添加Site

  • 首先需要进行安装,在settings中INSTALL_APP添加django.contrib.sites,并生成对应的表

  • 每个Site对象都具有name和domain,在表中添加对应的site实例即可

  • 在不同站点的settings中添加SITE_ID为指定的site的id号即可


定义model

  • 当具有site时,就可以定义含有site多对多类型的model

    
     class ok(models.Model):
         headline = models.CharField(max_length=200)
         sites = models.ManyToManyField(Site)
     

取数据

  • 当从含有site这个field的model中取数据时,就可以只去与本站相关联的数据了

    
     from django.conf import settings
     from books.models import ok
    
     def ok1(request):
         a=ok.objects.filter(site__id=settings.SITE_ID)
         return HttpResponse(a)
     

CurrentSiteManager

  • CurrentSiteManager可以自动过滤当前site_id的信息

    
     class Photo(models.Model):
         photo = models.FileField(upload_to='/home/photos')
         site = models.ForeignKey(Site)
         objects = models.Manager()
         on_site = CurrentSiteManager()
     
  • 按照上面的代码,Photo.objects.filter(site__id=settings.SITE_ID)和Photo.on_site.all()等价

  • 当model中对应的外键名字不为site时,使用on_site = CurrentSiteManager(‘publish_on’)来指定


自动判断

  • current_site = Site.objects.get_current()可以取出当前站点的site

    
     current_site = Site.objects.get_current()
     if current_site.domain == 'foo.com':
          # Do something
     else:
          # Do something else.