【问题标题】:how to show content depending on domain/subdomain如何根据域/子域显示内容
【发布时间】:2014-08-23 19:02:27
【问题描述】:

我正在尝试写一个小博客,其中只有一些特定的博客内容应该根据域/子域显示。

可以说,主要博客位于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 的法语博客条目

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    我认为您应该看看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)
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 你的意思是lang = models.ForeignKey(Language)
      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2013-05-09
      • 2013-05-17
      • 2016-11-15
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多