我一直在这个情况下,我想用一本字典非常喜欢的一个“本地人”结束了还给,但只包含在功能范围有限的变量。有没有办法在Python做到这一点?

详细了解一下为什么我要做到这一点:我使用Django玩,当我去给我的模板背景下,我不得不要么手动制作一本字典(违反干的原则),或在传递当地人(),它含有更多的项目则需要(浪费)。有可能是什么我和Django缺少这将缓解蟒蛇级解决方案的需求?

要澄清:

所以,我已经多次袭击的情况是,我有:

@render_to('my_template.html') 
def myview(request): 
    var1 = #blahblah 
    var2 = #... 
    # do stuff with vars 
    return {'var1': val1,'var2':val2} 

因此,而不是重复这些变量和命名约定,我会做:

@render_to('my_template.html') 
def myview(request): 
    var1 = #blahblah 
    var2 = #... 
    # do stuff with vars 
    return locals() 

我觉得这更干净,但我知道它的种类马虎,因为大约有30多个项目在当地人(),那么我的实际需要。

有帮助吗?

解决方案

我不知道我同意做一本字典是违反干的,但如果你真的不想在所有重复任何东西,你可以只定义在视图顶部的“语境”词典使用字典键,而不是变量在整个视图。

def my_view(request):
    context = {}
    context['items'] = Item.objects.all()
    context['anothervalue'] = context['items'][2].name
    return render_to_response('template.html', context)

其他提示

如何传入一个字典违反干的? Django是所有关于干,所以我怀疑标准的行为,将直接违反它。在这两种情况下,然而,我使用 Django的恼人的修改版本使整个事情更容易:

@render_to('my_template.html')
def myview(request):
    # figure stuff out...
    return {'var1':'val1','var2','val2'}

render_to装饰取请求上下文和所有的好东西的照顾。效果很好。

如果这没有帮助,我建议改写你的问题。不管你想要做瞎搞与locals()和这种是很少需要特别是在这种情况下使用Django。

你说你不喜欢使用当地人(),因为它是“浪费”。浪费是什么?我相信它会返回已经存在的字典,它只是给你对它的引用。而且,即使它有创建字典,这是在Python的最高度优化的操作之一,所以不用担心。

您应该专注于最能表达你的意图,用最少的可能性错误的代码结构。你所担心的浪费是什么好担心的。

虽然我同意与其他许多受访者认为通过两种locals()或完全指定的字典{'var1':var1, 'var2': var2}是最容易确定,如果你特别希望“子集”,例如locals()一个字典,从硬远远要么,e.g:

loc = locals()
return dict((k,loc[k]) for k in 'var1 var2'.split())
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top