4

我有兴趣设置我的应用程序,以便我可以提供特定位置的内容。

类似于 craigslist,miami.craigslist.org 仅显示迈阿密的帖子。

假设我有一个具有 City 字段的模型,那么实现这一目标的最佳方法是什么?

4

2 回答 2

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字段。然后,您会将其与内容关联为外键。它有点与站点框架相同的一般概念,但在这种情况下,您并没有真正创建不同的站点。

于 2012-05-11T00:19:05.407 回答
1

您应该查看“站点”框架。如果您曾经使用过内置的 Django 管理员,那么您可能已经看到了站点部分,其中 example.com 是默认列出的唯一站点。

真实世界的例子,来自我提供的链接:

将内容与多个站点相关联

由 Django 提供支持的网站 LJWorld.com 和 Lawrence.com 由同一个新闻机构运营——位于堪萨斯州劳伦斯的 Lawrence Journal-World 报纸。LJWorld.com 专注于新闻,而 Lawrence.com 专注于本地娱乐。但有时编辑想在这两个网站上发表一篇文章。

解决这个问题的脑残方法是要求网站制作者两次发布相同的故事:一次发布给 LJWorld.com,另一次发布给 Lawrence.com。但这对于网站制作者来说效率很低,并且在数据库中存储同一故事的多个副本是多余的。

更好的解决方案很简单:两个站点使用相同的文章数据库,并且一篇文章与一个或多个站点相关联。

因此,您可以在 Site 模型中添加一个字段,而不是 City 字段,例如:

sites = models.ManyToManyField(Site)

您基本上拥有一个所有城市都使用的数据库。方便,但我想知道它会如何缩小道路。我自己开始了一个类似的项目,并将使用 Django 站点框架来启动该项目。不过,我有兴趣从数据库人员那里听到一个更具可扩展性的解决方案。

于 2012-05-11T00:01:44.000 回答