如何根据域/子域显示内容

时间:2014-08-23 19:02:28

标签: python django

我正在尝试编写一个小博客,其中只有一些特定的博客内容应该显示,具体取决于域/子域。

我们可以说,主要博客位于www.mainblogsite.com。在这里,我想显示所有博客条目。

但是,我们可以说,还有一个主要博客的子域名,名为www.fr.mainblogsite.com,其中只显示法语中的博客条目。

我正在Django写博客。

我对数据库建模的初步想法是这样的:

class BlogEntry(models.Model):
  text = models.TextField()
  lang = models.CharField(max_length="2")

我只是使用request.META['HTTP_HOST']获取域名,并根据域名,我将按语言过滤博客条目,如

#for fr.mainblogsite.com
BlogEntry.objects.filter(lang='fr')

仅为fr.mainblogsite.com

提供了法语博客条目

我的问题是:这个数据库架构有意义吗?我不太了解域和子域如何工作,...它如何以及在哪里可以更好?

2 个答案:

答案 0 :(得分:2)

我认为您应该查看django.contrib.sites模型,这些模型正是您要解决的问题 - 具有由内容表示的多个子域和域。

引用那里提到的例子:

from django.db import models
from django.contrib.sites.models import Site

class BlogEntry(models.Model):
    headline = models.CharField(max_length=200)
    text = models.TextField()
    # ...
    sites = models.ManyToManyField(Site)

答案 1 :(得分:1)

从数据库设计的角度来看,您应该将lang字段移动到自己的模型并从BlogEntry引用它。

class Language(models.Model):
    lang = models.CharField(max_length="2")

class BlogEntry(models.Model):
    text = models.TextField()
    lang = manufacturer = models.ForeignKey('Language')

这样,您可以通过更新单个记录而不是多个记录来更改语言的实际名称。但是,如果你确定这绝不会让你坚持你的方法。