19

我把这个声明写成几行:

    return render_to_response('foo/page.html',
        {
            'situations': situations,
            'active': active_req,
        },
        context_instance=RequestContext(request))

就目前而言,使用 PEP8 脚本,它在第二行给我一个“E128:连续行缩进不足以进行视觉缩进”错误。

我尝试了一大堆不同的格式化方式,唯一能让 PEP8 停止抱怨的方法是:

    return render_to_response('foo/page.html', {
        'situations': situations,
        'active': active_req,
    },
        context_instance=RequestContext(request))

但这看起来像垃圾。

建议?E124、E126 和 E128 似乎是一个巨大的痛苦!

我不介意{在第一行(或单独使用)的解决方案,但我希望有一个解决方案,其中},context_instance...处于相同的缩进级别。

4

3 回答 3

22

问题是所有参数都应该缩进到同一级别。这包括初始函数调用行上的任何参数。

所以,虽然你可以像这样修复它:

return render_to_response('foo/page.html',
                          {
                              'situations': situations,
                              'active': active_req,
                          },
                          context_instance=RequestContext(request))

……这通常只会让你违反 80 列规则,即使pep8没有抱怨,也肯定会让你的代码更丑陋。你可能想要的是这样的:

return render_to_response(
    'foo/page.html',
    {
        'situations': situations,
        'active': active_req,
    },
    context_instance=RequestContext(request))

或者,当然,你可以打破你的大表情:

d = {
    'situations': situations,
    'active': active_req,
}
context = RequestContext(request)
return render_to_response('foo/page.html', d, context_instance=context)
于 2013-08-28T20:58:59.823 回答
4

我很确定它希望您将所有内容缩进到开头的括号中(如果您需要那里的参数) - 即

return render_to_response('foo/page.html',
                          {
                              'situations': situations,
                              'active': active_req,
                          },
                          context_instance=RequestContext(request))

否则,

return render_to_response(
    'foo/page.html',
    {
        'situations': situations,
        'active': active_req,
    },
    context_instance=RequestContext(request))

也应该是合法的。

或者一些这样的。请参阅有关正确缩进实践的pep 文档

以下是规范中的相关示例,用于路过的流浪者:

Yes:

# Aligned with opening delimiter
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# More indentation included to distinguish this from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)
No:

# Arguments on first line forbidden when not using vertical alignment
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
Optional:

# Extra indentation is not necessary.
foo = long_function_name(
  var_one, var_two,
  var_three, var_four)
于 2013-08-28T20:57:18.013 回答
4

你有没有试过django-annoying

你可以这样做...

@render_to('foo/page.html')
def bar(request):
    return {'situations': situations,
            'active': active_req,}

我认为这更干净,它可以帮助你使用 PEP8 风格......

于 2013-08-28T20:57:47.300 回答