Web App最佳实践templates_dict

时间:2010-05-18 13:38:33

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

刚刚编码约6-9个月。在阅读一些代码或阅读最佳实践后,我可能会多次更改编码风格。但有一件事我还没有进行交叉是一个很好的原因填充template_dict。

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

一个想法是拥有一个处理所有更改的方法。但我很好奇,如果有最好的做法吗?或者是“做你想做的事” - 事物的类型?

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

..弗雷德里克

编辑

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

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

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

这个template_dict我需要操作才能将数据/ dicts /列表发送到视图(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中,而是出现在其他类和方法中。

但你应该做一般的想法。

1 个答案:

答案 0 :(得分:1)

如果有问题的函数是某个对象foo的所有方法,那么它们中的每一个都可以引用它们正在构建的上下文(我想你的意思是“模板字典”?)作为{ {1}}之类的(属性名称有点武断,关键点在于您可以将上下文保留为self.ctx的属性,通常在foo的{​​{1}}中初始化为空,并通过foo的方法逐步建立起来;最后,__init__已准备好了。)

这在一般情况下不起作用,其中函数遍布整个地方而不是单个对象的方法。在这种情况下,foo确实需要传递给每个函数(尽管函数通常可以就地改变它而不需要返回它)。