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

2024-09-30 18:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着写一个小博客,其中只有一些特定的博客内容应显示取决于域/子域。你知道吗

假设,主博客位于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

我的问题是:这种数据库架构有意义吗?我不太了解域和子域是如何工作的,。。如何以及在哪里能更好?你知道吗


Tags: django子域com数据库内容langmodelswww
2条回答

从DB设计的角度来看,您应该将lang字段移动到自己的模型中,并从BlogEntry引用它。你知道吗

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

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

这样,您就可以通过更新单个记录而不是多个记录来更改语言的实际名称。然而,如果你确信这永远不会发生,你也可以坚持你的方法。你知道吗

我认为您应该看看^{}模型,它们正是为了解决您正试图解决的问题而存在的—具有多个子域和由内容表示的域。你知道吗

引用上面提到的例子:

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)

相关问题 更多 >