代码之家  ›  专栏  ›  技术社区  ›  Marcus Whybrow

在Django中以编程方式使用HTTPResponse

  •  1
  • Marcus Whybrow  · 技术社区  · 14 年前

    我正在开发一个应用程序,可以为模型启用预览功能。标记为可预览的模型将允许在Django管理界面和 预览 在站点上使用与该类型的对象通常用于渲染自身的视图相同的视图,但是使用新的(未保存的)对象来代替它进行渲染。

    当您提前知道视图或模板时,这是一项非常容易的定制任务。但我希望这是可重用的和简单的。

    我在想什么

    resolve() urls function 到现有(已保存)对象的 get_absolute_url() 值来发现动态使用的视图。然后调用该视图,返回 HTTPResponse

    似乎到了 Http响应

    所以我想问题是: .

    Http响应 还有一个物体)。

    另外,如果你提出了一个完全不同的方法来解决这个问题,我一定会在应用程序文档中将这个概念归功于你(尽管它现在只是一个小应用程序)。

    1 回复  |  直到 14 年前
        1
  •  1
  •   KillianDS    14 年前

    这不是微不足道的可能不,最简单的方法实际上是 write your own template context processor GET['preview'] 设置,然后基于其他一些GET或POST数据设置字典值。此外,当添加其他变量时,应确保这些变量不会覆盖此方法设置的现有值(否则视图将使用其他数据覆盖它)。

    一个完全不同的方法,只是稍微'查看'侵入,我假设你不想保存模型,所以它不会出现在公共列表。一种方法是添加“预览”字段,并使用管理器限制查找,例如:

    类NoPreviewManager(models.Manager): return super(MyModelManager,self).get\u query\u set().filter(preview=False)

    类MyModel(models.Model): ... #其他领域 preview=models.BooleanField()

    objects = NoPreviewManager()
    allobjects = models.Manager()
    

    在所有正常视图中,您可以使用 MyModel.objects 所以预览不会被列出。在您使用的对象特定视图中 MyModel.allobjects 也可以启用预览的污损视图。这样,您就不必执行奇怪的视图劫持操作,但是如果预览对象没有升级为真实对象,您应该注意将它们清理干净。请注意,您还可以将许多这种逻辑组合到一个基类中。