【问题标题】:Webapp best practice template_dictWebapp 最佳实践 template_dict
【发布时间】:2010-05-18 13:38:32
【问题描述】:

在编码了大约 6-9 个月之后。在阅读了一些代码或阅读了最佳实践之后,我可能多次改变了我的编码风格。但是我还没有解决的一件事就是为什么要填充 template_dict。

到目前为止,我将 template_dict 传递给许多方法(更改/修改它)并返回。结果是每个方法都将 template_dict 作为第一个参数并返回它,在我看来这似乎不是最好的解决方案。

一个想法是有一个方法来处理所有的变化。但是我很好奇是否有最佳实践?还是“做你想做的事”之类的?

我认为非常难看的两件事是作为参数发送并在所有方法中返回它。而只是var名称在代码中被写了xxx次:)

..弗雷德里克

编辑

为了演示我对 template_dict 的意思(我认为这是一个通用术语,我从 django 模板方法的 google 实现中得到它)。

我有一个通过 render.template 方法传递给模板的 dict:

template.render(path, template_dict) #from google.appengine.ext.webapp import template

我需要操作这个 template_dict 以便将数据/字典/列表发送到视图(html 文件)。如果我没记错的话。

因此,考虑到这一点,我的代码通常最终看起来像这样:

## Main.py file to handle the request and imports classes.

from models import data
from util import foo

class MainHandler(webapp.RequestHandler):
    template_dict = { 'lang' : 'en' }
    ## reads all current keys and returns dict w/ new keys, if needed
    template_dict = data.getData(template_dict) 
    if 'unsorted_list' in template_dict:
        template_dict = util.foo(template_dict)
    ## and so on....

    path = os.path.join(os.path.dirname(__file__), 'templates', file)
    self.response.out.write(template.render(path, template_dict))

在我的大多数应用程序中,许多返回和集合不会出现在 main.py 中,而是出现在其他类和方法中。

但你应该做大体的想法。

【问题讨论】:

  • 什么是'template_dict'?你谈论它好像它是 Django 的一个众所周知的部分,但我从未听说过或使用它。显示一些代码来演示它的作用。
  • 我假设他指的是您在 render_to_response 方法中传递给模板的字典......但我无法想象为什么您必须将它传递给多个方法。我同意,需要代码示例。
  • @Daniel 和 Chris:我会更新一些代码来说明我的意思。
  • 这似乎与 Django 没有任何关系。您正在使用 GAE 自己的迷你框架 webapp。适当更改标题和标签。
  • @Daniel:没错。但由于谷歌使用 djangos 模板和上下文(来自 django.template)从文件中渲染它的模板,然后将 Context 应用于它以替换匹配字典中的所有 django 标签。这是否也适用于 django 用户?

标签: python google-app-engine web-applications


【解决方案1】:

如果所讨论的函数都是某个对象foo 的所有方法,那么它们中的每一个都可以引用它们正在构建的上下文(我想这就是你所说的“模板字典”的意思?)self.ctx或类似的(属性名称有些随意,关键是您可以将上下文保留为foo的属性,通常在foo__init__中初始化为空,并通过foo逐步构建它的方法;最后,foo.ctx 为你准备好了)。

这不适用于更一般的情况,即函数遍布各处而不是单个对象的方法。在这种情况下,ctx 确实需要传递给每个函数(尽管函数通常可以就地更改它并且不需要返回它)。

【讨论】:

  • @fredrik,当然:正如我想象的那样,这就是通常所说的上下文(这就是我使用属性名称ctx 的原因;-)。正如我已经提到的,就在我上面回答的最后:让所有这些功能改变 dict(AKA 上下文)到位;您仍然可以将其作为参数传递(如果函数不是单个参数的方法,这是唯一合理的做法),但您不会拥有所有 template_dict = 样板分配。
猜你喜欢
  • 2010-10-19
  • 2013-06-26
  • 2010-12-10
  • 2010-12-30
  • 2020-12-23
  • 1970-01-01
  • 2010-09-05
  • 2014-12-21
  • 2010-12-23
相关资源
最近更新 更多