我对设置我的应用程序感兴趣,这样我就可以提供特定于位置的内容。
比如craigslist,miami.craigslist.org只显示迈阿密的帖子。
假设我有一个具有City字段的模型,那么实现这一目标的最佳方法是什么?
发布于 2012-05-11 08:19:05
Banjer推荐了Sites框架,但我觉得它可能不是100%完美地适合你的情况。sites框架适用于共享同一数据库的不同站点。但在你的情况下,这都是相同的网站,你基本上只是想传递一个论点,为你的城市观点。
您可以做一些更简单的事情,只需将通配符*.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")我想这取决于你的站点中“位置”结构的健壮性。它很可能是一个包含各种元数据字段(包括tag字段)的City模型。然后将其作为外键与内容相关联。它在某种程度上接近了与站点框架相同的一般概念,但在这种情况下,您并没有真正创建不同的站点。
发布于 2012-05-11 08:01:44
你应该去看看"sites" framework。如果您曾经使用过内置的Django admin,那么您可能见过站点部分,其中默认情况下example.com是唯一列出的站点。
真实世界的例子,来自我提供的链接:
将内容与多个网站关联的
由姜戈提供动力的网站LJWorld.com和Lawrence.com由堪萨斯州劳伦斯市的劳伦斯世界报同一家新闻机构运营。LJWorld.com专注于新闻,而Lawrence.com专注于本地娱乐。但有时编辑想要在两个网站上发表一篇文章。
解决这个问题的办法是要求网站制作人发布同一篇文章两次:一次是针对LJWorld.com,另一次是针对Lawrence.com。但这对于网站制作者来说效率很低,而且在数据库中存储同一故事的多个副本也是多余的。
更好的解决方案很简单:两个站点使用相同的文章数据库,一篇文章与一个或多个站点相关联。
因此,您可以在Site的模型中添加一个字段,而不是City字段,例如:
sites = models.ManyToManyField(Site)你基本上有一个所有城市都在使用的数据库。很方便,但我想知道它将如何扩展。我正在自己开始一个类似的项目,并将使用Django sites框架来启动该项目。不过,我有兴趣从数据库人员那里听到一种更具伸缩性的解决方案。
https://stackoverflow.com/questions/10543620
复制相似问题