我有兴趣设置我的应用程序,以便我可以提供特定于位置的内容。
像craigslist这样的东西,miami.craigslist.org只显示迈阿密的帖子。
假设我有一个拥有City字段的模型,那么实现这一目标的最佳方法是什么?
答案 0 :(得分:5)
Banjer建议使用Sites框架,但我觉得它可能不是100%完美适合您的情况。站点框架适用于共享同一数据库的不同站点。但在你的情况下,它的所有相同的网站,你基本上只是想传递一个参数你的城市的意见。
只需将通配符*.domain.com
指向django网站,然后在视图中使用request.get_host()
解析子域,就可以做一些更简单的事情:
https://docs.djangoproject.com/en/1.4/ref/request-response/#django.http.HttpRequest.get_host
因此,如果域名为:“losangeles.domain.com”,并且您解析出“losangeles”,则可以将其用作查询中的城市“标记”。当您创建新内容时,您只需将其标记为城市。
Post.objects.filter(city_tag="losangeles")
我认为这取决于您网站中所需的“位置”结构的稳健程度。它很可能是具有各种元数据字段的City
模型,包括tag
字段。然后,您将其与内容关联为外键。它与Sites框架的概念相同,但在这种情况下,您并没有真正创建不同的站点。
答案 1 :(得分:1)
您应该查看"sites" framework。如果您曾经使用过内置的Django管理员,那么您可能已经看到了example.com部分,其中example.com是默认列出的唯一网站。
真实世界的例子,来自我提供的链接:
将内容与多个网站相关联
以Django为动力的网站LJWorld.com和Lawrence.com运营 同一个新闻机构 - 劳伦斯杂志 - 世界报 堪萨斯州劳伦斯。 LJWorld.com专注于新闻,而Lawrence.com 专注于本地娱乐。但有时编辑希望发表 两个网站上都有一篇文章。
解决问题的脑死亡方式是要求网站 制片人两次发布相同的故事:一次是LJWorld.com和 再次为Lawrence.com。但这对网站制作人来说效率低下,而且 在同一个故事中存储多个同一个故事的副本是多余的 数据库中。
更好的解决方案很简单:两个站点都使用相同的文章 数据库,文章与一个或多个网站相关联。
因此,您不是使用City字段,而是在Site的模型中添加一个字段,例如:
sites = models.ManyToManyField(Site)
您基本上拥有一个所有城市都使用的数据库。方便,但我想知道它将如何缩小规模。我自己也开始了一个类似的项目,并将使用Django站点框架来实现项目。我很想听听来自数据库人员的更具可扩展性的解决方案。